Qt pro文件通过外部传参实现条件编译

本文介绍了qmake中常用的条件编译方法,包括CONFIG参数条件编译及contains函数配合变量使用的方法,并展示了如何通过外部传参来控制不同的编译逻辑。

先总结下常用的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”了

其他的条件编译方式同样可以按照外部这种方式改变运行逻辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值