如果代码里面有些判断需要不同的参数做判断;
办法:在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])