提问人:Pietro 提问时间:9/7/2013 最后编辑:László PappPietro 更新时间:9/16/2022 访问量:28401
如何在 .pro 文件中检查所选的 Qt 版本?
How to check the selected version of Qt in a .pro file?
问:
我安装了多个版本的 Qt,我需要用所有这些版本编译我的项目。
使用专业文件,我在文档中找不到如何进行条件编译。
理想情况下,这是我想做的:
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
在这种情况下,使用将起作用。但是,如下所述,执行字符串比较。但是,最好使用,因为当您尝试使用 Qt 6 编译代码时(将来的某个地方),您的代码将自动停止工作。
equals
equals
greaterThan
lessThan
不需要添加到 ,因为它是默认包含的。
gui
QT
因此,您的代码应该是:
greaterThan(QT_MAJOR_VERSION, 4) {
QT += widgets
}
以下是一些未记录的 qmake
gem:
defined(func, type)
如果已定义,则返回 true;type 必须是 或 ,以匹配 或 。
func
test
replace
defineTest
defineReplace
equals(var1, var)
(也可作为 )。
如果 var1 等于 var2(字符串比较),则返回 true。isEqual
lessThan(var1, var2)`
如果小于(作为整数),则返回 true。
var1
var2
greaterThan(var1, var2)
如果大于(作为整数),则返回 true。
var1
var2
inFile(file, var, val)
如果在指定文件中定义了变量,则返回 true。此外,它可以测试它是否具有请求的值。
var
load(string)
和 之间的交叉。 将在标准功能路径中查找名为“FOo.PRF”的文件,并立即执行其内容。在“.pro”文件完成处理后,最后执行其中包含的功能。Like ,如果找到文件,它将返回 true。
include()
CONFIG += [feature]
load(foo)
CONFIG
include()
这是一个简单的测试。这就是我们在QtSerialPort以及Qt框架中的其他一些模块中所做的:
lessThan(QT_MAJOR_VERSION, 5) {
...
} else {
...
}
类似和常见的情况是:
contains(QT_MAJOR_VERSION, 5): ...
艺术
greaterThan(QT_MAJOR_VERSION, 4): ...
在这里,你可以找到另一个我们一直在做的QtSerialPort示例。
您可以在一行中进行检查,如下所示:
equals(QT_MAJOR_VERSION, 5):!lessThan(QT_MINOR_VERSION, 5) {
QT += bluetooth
} else {
message(Qt $$QT_VERSION Bluetooth not supported.)
}
!lessThan
那里代表更大或相等。
从 Qt 5.10 开始,有 versionAtLeast 和 versionAtMost 测试函数。
使用示例:
!versionAtLeast(QT_VERSION, 5.11.2):error("Use at least Qt version 5.11.2")
PS:发布这个答案,因为简单的谷歌搜索“qmake check Qt version”不会带来这些参考(但这篇文章会带来)。
评论