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
- build_pass:CONFIG(debug, debug|release){
- message(Debug bulid)
- else:build_pass {
- message(Release build)
To build from command line, just call:
Debug build:
- qmake
- make debug
- make release