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

2021-10-13 15:23:10 字數 1263 閱讀 8708

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

win32 

linux

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

config += mingw-cc
我們就可以像用這個來做判斷

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

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

defines += q_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  else
換成msvc版的qt應該有msvc的預定義值,值的具體是啥我就不看了,還得換qt版本,有mingw和gcc就夠用了。

Qt 根據不同平台的條件編譯

在使用iar,keil寫微控制器時,都可以先 define乙個變數,然後根據變數的不同值編譯不同的 在qt裡也可以這樣,針對嵌入式的程式,一般是會在x86上編譯,debug,然後再部署到arm去跑,這樣,x86與arm之間,可能就會有一些差異,如不同的平台,呼叫不同的庫,這樣就可以先 define乙...

根據不同瀏覽器寫不同css

最近幾天幫朋友弄了個簡單的生日頁面放在我的github部落格上,就有了不同瀏覽器可能發生介面的錯亂,如何解決?當然,作為乙個小白,我的思路是通過js判斷瀏覽器型別,再用jquery變換相應的樣式。事實證明是可以的。參考這裡只是進行最簡單的判別 例子 function return false if ...

(原創)後置 在不同編譯器中的行為

intx 0 x x 請問上述兩行 執行之後,x的值是什麼?有的同事說 1,有的同事說 0,究竟是什麼呢,試試就知道。試了三個編輯器,inter gcc和vc 自帶的cl inter 和gcc 得出的結果都是0,vc得出的結果是1。究竟哪個對呢?讓我們再看看那兩行 第一行不用多說,把乙個變數賦值為 ...