Qt 条件编译 arm windows linux 判断 跨平台

时间:2024-01-26 11:17:52

如果代码里面有些判断需要不同的参数做判断;

办法:在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])