先总结下常用的qmake条件编译的各种方式,然后再给出外部传参控制逻辑的方式
1、qmake条件编译的总结
1.1 CONFIG参数条件编译
示例如下:
CONFIG += arm64
arm64 {
message("build platform is arm64")
} else:mips64 {
message("build platform is mips64")
} else {
message("build platform is x86")
}
由于在CONFIG参数里面添加了arm64参数,所以会打印出“build platform is arm64”
有些参数在qt的默认CONFIG里面就有,如用于判断操作系统的win32、unix,示例如下:
!win32 {
message("this is not in windows OS")
}
unix {
message("this is in unix OS")
}
CONFIG参数控制逻辑还有一种写法,通常用于区分debug和release模式时会采用这种写法,如下所示:
CONFIG(debug, debug|release) {
message("this is debug mode")
}
CONFIG(release, debug|release) {
message("this is release mode")
}
上面这种写法应该是CONFIG参数中有第一个参数的定义时,就会触发逻辑,至于第2个参数,可能是限定第一个参数的取值,我特意些了个下面的示例验证了下,发现可以进入逻辑,示例如下:
CONFIG += arm64
CONFIG(arm64, arm64|mips64) {
message("this is arm64 mode")
}
注意,上面所有的代码,条件和大括号“{”最好都在同一行
1.2 contains函数配合变量
下面给出一个配合宏定义变量DEFINES的示例:
DEFINES += ASAN
# contains和{必须在同一行,否则报错
if(contains(DEFINES, ASAN)) {
message("this is use asan mode")
} else {
message("this is no use asan mode")
}
你使用自定义的变量或CONFIG变量也是可以的,下面给出一个自定义的变量的示例:
MYVALUE += arm64
if(contains(MYVALUE, arm64)) {
message("this is MYVALUE of arm64")
} else {
message("this is MYVALUE not arm64")
}
2、外部传参控制条件编译
上面的代码我都先给出了参数的定义,假如不给参数定义,只先下面一段代码:
arm64 {
message("build platform is arm64")
} else:mips64 {
message("build platform is mips64")
} else {
message("build platform is x86")
}
那么CONFIG参数就可以通过外部补充以选择不同的运行逻辑,比如执行:
qmake . CONFIG+=mips64
这样运行结果就是打印出“build platform is mips64”了
其他的条件编译方式同样可以按照外部这种方式改变运行逻辑
本文介绍了qmake中常用的条件编译方法,包括CONFIG参数条件编译及contains函数配合变量使用的方法,并展示了如何通过外部传参来控制不同的编译逻辑。

5426

被折叠的 条评论
为什么被折叠?



