天天看點

qmake 之 CONFIG(debug, debug|release)

http://hi.baidu.com/dbzhang800/item/759aa224fc1140c9a4275a41

qmake 之 CONFIG(debug, debug|release)

問題

在 Qt 程式設計中,多數人用的都是 qmake,并編寫相應pro檔案。

實際中經常需要對 debug 與 release 兩種編譯模式 設定不同的選項,比方說連結不同庫

遇到該問題,簡單看看qmake的manual,不少人都會寫出類似下面的内容:

debug {

LIBS += -L../lib1 -lhellod

}

release {

LIBS += -L../lib2 -lhello

很不幸,這麼做通常不能正常工作。

如果打開看生成的makefile檔案,會發現 無論是debug還是release,上面的兩個語句都會同時起作用。也就是說,上面相當于

LIBS += -L../lib1 -lhellod -L../lib2 -lhello原因

這是很違反直覺的,因為CONFIG可以同時定義 debug 和 release,但隻有一個處于active(當兩個互斥的值出現時,最後設定的處于active狀态)

比如:

CONFIG = debug

CONFIG += release

...

這種情況下,release處于active狀态,但,debug 和 release 都能通過上面的測試。

如何解決

CONFIG(debug, debug|release) {

} else {

CONFIG(debug, debug|release):LIBS += -L../lib1 -lhellod

CONFIG(release, debug|release):LIBS += -L../lib2 -lhello

那麼,CONFIG(debug, debug|release) 這種文法是什麼含義呢?

兩個參數,前者是要判斷的active的選項,後者是互斥的選項的一個集合。

參考

  • http://doc.trolltech.com/latest/qmake-function-reference.html#config-config
  • http://developer.qt.nokia.com/faq/answer/what_does_the_syntax_configdebugdebugrelease_mean_what_does_the_1st_argumen
  • http://www.qtcentre.org/threads/28049-qmake-Project-file-has-both-quot-debug-quot-and-quot-release-quot-conditions-true
  • http://stackoverflow.com/questions/1130106/linking-with-a-debug-release-lib-with-qmake-qt-creator
  1. build_pass:CONFIG(debug, debug|release){
  2. message(Debug bulid)
  3. else:build_pass {
  4. message(Release build)

To build from command line, just call:

Debug build:

  1. qmake
  2. make debug
  1. make release
Qt

繼續閱讀