Qt 條件編譯 arm windows linux 判斷 跨平台


如果代碼里面有些判斷需要不同的參數做判斷;

辦法:在pro文件里面做定義

方法1:直接定義一個宏;用的時候可以直接判斷,這樣做不好的地方是編譯前需要重新切換一下宏

1)定義宏

DEFINES += __ARM _ARM _LINUX
DEFINES += _WIN32 _WINDOWS
DEFINES += _LINUX_86 _LINUX

2)用的時候使用條件判斷contians 是否包括:

contains(DEFINES, _ARM){
TARGET = GwEmsQt
}else{
contains(DEFINES,_WINDOWS){
}else{
TARGET = GwEmsQtWin
}
TARGET = GwEmsQtLinux86
}

 

方法2:這個宏的定義直接根據宏來判斷,

由於內置函數isEqual不會如何判斷字符串是否含有arm,只能寫全路徑,且只能先定義一個臨時變量ISARM來判斷

后續步驟如1一樣;

 

ISARM=$$[QT_HOST_PREFIX]
isEqual(ISARM, "/home/wudqubt/tools/qt-arm-2009"){
message("arm")
DEFINES += __ARM _ARM _LINUX
}else{
if(contains(CONFIG, linux)){
message("linux no arm")
DEFINES += _LINUX_86 _LINUX
}else{
message("no linux no arm")
DEFINES += _WIN32 _WINDOWS
}
}

 

其他一些有用的宏和函數:

 

message(QMAKE_HOST.os: $$QMAKE_HOST.os)
message(QMAKE_HOST.arch: $$QMAKE_HOST.arch)
message(QMAKE_HOST.cpu: $$QMAKE_HOST.cpu)
message(QMAKE_HOST.version: $$QMAKE_HOST.version)
message(QMAKE_HOST.version_string: $$QMAKE_HOST.version_string)
message(QMAKESPEC: $${QMAKESPEC})
message(QT_HOST_PREFIX: $$[QT_HOST_PREFIX])
message(CONFIG: $$CONFIG)
message(defines: $$DEFINES)
message(QMAKE_VERSION: $$[QMAKE_VERSION])

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM