Qt設定根據編譯器不同連結不同的lib庫

My__God發表於2021-01-01

我們知道Qt的pro工程檔案中可以編寫編譯條件,根據不同的條件生成不同的編譯指令,常用的是根據系統的不同包含不同的原始檔,如

win32 {
    HEADERS += windows.h
}
linux {
    HEADERS += linux.h
}

除了原始檔,連結的lib檔案也需要在pro中指定,而在windows平臺中,可選的編譯器有msvc和mingw兩種,且這兩種編譯器的庫檔案不能通用,那麼我們怎麼在pro檔案中根據編譯器的不同包含不同的lib庫檔案呢,pro檔案中我們可以通過CONFIG+=的形式定義自己的條件,如增加

CONFIG += mingw-cc

我們就可以像用這個來做判斷

mingw-cc {
    LIBS += -Lmingw -ltest
} else {
    LIBS += -Lvs -ltest
}

這樣就可以連線不同的lib庫檔案了,但是需要手動更改CONFIG設定,那麼Qt有沒有內建的表示當前編譯器型別的CONFIG變數呢,網上沒找到完整的qmake或pro檔案的說明文件,我們怎麼才能知道CONFIG的預定義值都有啥呢?

我們知道pro中可以通過$${var}的形式引用預定義變數,而pro檔案最終會通過qmake編譯成makefile檔案,這個makefile的內容是會落盤的,是我們能看見的,那麼我們增加如下定義

DEFINES += Q_CONFIG=$${CONFIG}

編譯一下,看生成的makefile中DEFINES的值,找到Q_CONFIG的定義如下

-DQ_CONFIG=lex yacc debug exceptions depend_includepath testcase_targets import_plugins import_qpa_plugin windows file_copies qmake_use qt warn_on release link_prl debug_and_release debug_and_release_target precompile_header shared release no_plugin_manifest win32 mingw gcc copy_dir_files debug DebugBuild Debug build_pass debug qml_debug debug DebugBuild Debug build_pass

等號後面就是CONFIG的預設值了,我們發現其中有mingw和gcc的定義,那麼我們就可以直接通過mingw和gcc來判斷編譯器型別了,不用自己定義了

mingw {
    LIBS += -Lmingw -ltest
} else {
    LIBS += -Lvs -ltest
}

換成msvc版的qt應該有msvc的預定義值,值的具體是啥我就不看了,還得換Qt版本,有mingw和gcc就夠用了。

相關文章