我安装了多个版本的Qt,我需要使用所有版本来编译我的项目。
使用pro文件,我在文档中找不到如何进行条件编译。
理想情况下,这就是我想做的:
QT_VERSION = 5 # this can be 4, set manually
if(QT_VERSION == 5) {
QT += widgets
}
if(QT_VERSION == 4) {
QT += gui
}
自然,pro文件中不存在if()命令。
有没有更好的方法来做同样的事情?
您可以在此处使用条件函数和范围:
QT_VERSION = 5 # this can be 4, set manually
equals(QT_VERSION, 5){
QT += widgets
}
equals(QT_VERSION, 4) {
QT += gui
}
但是,原始代码中需要注意一些事项:
无需明确定义Qt版本,如果忘记在.pro文件中进行更改,可能会令您头疼。相反,qmake会自动QT_MAJOR_VERSION
为您定义一个变量。
equals
在这种情况下,使用将起作用。但是,如下所述,equals
执行字符串比较。但是,最好使用它greaterThan
,lessThan
因为当您尝试使用Qt 6进行编译时(将来的某个时候),您的代码将自动停止工作。
不需要添加gui
到QT
,因为默认情况下已将其包含在内。
因此,您的代码应为:
greaterThan(QT_MAJOR_VERSION, 4) {
QT += widgets
}
这是一些未公开的qmake
宝石:
defined(func, type)
如果func
已定义,则返回true ;否则,返回true 。type必须为test
或replace
,以匹配defineTest
或defineReplace
。
equals(var1, var)
(也可以用作isEqual
)。
如果var1等于var2(字符串比较),则返回true。
lessThan(var1, var2)`
如果var1
小于var2
(返回整数),则返回true 。
greaterThan(var1, var2)
如果var1
大于var2
(作为整数),则返回true 。
inFile(file, var, val)
如果var
在指定文件中定义了变量,则返回true 。此外,它可以测试以查看它是否具有请求的值。
load(string)
include()
和之间有交叉的东西CONFIG += [feature]
。load(foo)
会在标准功能路径中查找名为“ foo.prf”的文件,并立即执行其内容。CONFIG
“ .pro”文件完成处理后,最后执行包含在其中的功能。像一样include()
,如果找到文件,它将返回true。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句