Pie*_*tro 20 qt qmake qt4 qtgui qt5
我安装了多个版本的Qt,我需要用所有这些版本编译我的项目.
使用专业文件,我在文档中找不到如何进行条件编译.
理想情况下,这就是我想要做的事情:
QT_VERSION = 5 # this can be 4, set manually
if(QT_VERSION == 5) {
QT += widgets
}
if(QT_VERSION == 4) {
QT += gui
}
Run Code Online (Sandbox Code Playgroud)
当然,pro文件中不存在if()命令.
有没有更好的方法来做同样的事情?
Nem*_*ric 24
您可以在此处使用条件函数和范围:
QT_VERSION = 5 # this can be 4, set manually
equals(QT_VERSION, 5){
QT += widgets
}
equals(QT_VERSION, 4) {
QT += gui
}
Run Code Online (Sandbox Code Playgroud)
但是,您需要在原始代码中注意以下几点:
明确定义Qt版本不是必需的,如果您忘记在.pro文件中更改它,它会让您头疼.相反,qmake会自动QT_MAJOR_VERSION为您定义变量.
使用equals将在这种情况下工作.但是,如下所述,equals执行字符串比较.但是,最好使用greaterThan并且lessThan因为当您尝试使用Qt 6(将来的某个地方)编译它时,您的代码将自动停止工作.
添加gui到QT是不需要的,因为它是默认包含.
所以,你的代码应该是:
greaterThan(QT_MAJOR_VERSION, 4) {
QT += widgets
}
Run Code Online (Sandbox Code Playgroud)
这里有一些未记载的qmake宝石:
defined(func, type)
Run Code Online (Sandbox Code Playgroud)
如果func已定义,则返回true ; 类型必须是test或replace,以匹配defineTest或defineReplace.
equals(var1, var)
Run Code Online (Sandbox Code Playgroud)
(也适用isEqual).
如果var1等于var2(字符串比较),则返回true.
lessThan(var1, var2)`
Run Code Online (Sandbox Code Playgroud)
如果var1小于var2(作为整数),则返回true .
greaterThan(var1, var2)
Run Code Online (Sandbox Code Playgroud)
如果var1大于var2(作为整数),则返回true .
inFile(file, var, val)
Run Code Online (Sandbox Code Playgroud)
如果var在指定文件中定义了变量,则返回true .此外,它可以测试它是否具有所请求的值.
load(string)
Run Code Online (Sandbox Code Playgroud)
include()和之间的交叉CONFIG += [feature].load(foo)将在标准功能路径中查找名为"foo.prf"的文件,并立即执行其内容.CONFIG在".pro"文件处理完毕后,最后执行包含在其中的功能.就像include(),如果找到文件,它将返回true.
eph*_*err 10
您可以像这样在一行中进行检查:
equals(QT_MAJOR_VERSION, 5):!lessThan(QT_MINOR_VERSION, 5) {
QT += bluetooth
} else {
message(Qt $$QT_VERSION Bluetooth not supported.)
}
Run Code Online (Sandbox Code Playgroud)
!lessThan there 代表更大或相等。
不确定从什么时候开始(Qt5我猜),有versionAtLeast和versionAtMost测试功能.
用法示例:
!versionAtLeast(QT_VERSION, 5.11.2):error("Use at least Qt version 5.11.2")
Run Code Online (Sandbox Code Playgroud)
PS:发布这个答案,因为简单的谷歌搜索"qmake检查Qt版本"没有带来这些参考(但这篇文章的确如此).
这是一个简单的测试。这就是我们在QtSerialPort以及 Qt 框架内的其他一些模块中所做的:
lessThan(QT_MAJOR_VERSION, 5) {
...
} else {
...
}
Run Code Online (Sandbox Code Playgroud)
类似和常见的条件是:
contains(QT_MAJOR_VERSION, 5): ...
Run Code Online (Sandbox Code Playgroud)
或者:
greaterThan(QT_MAJOR_VERSION, 4): ...
Run Code Online (Sandbox Code Playgroud)
在这里,您可以找到我们一直在那里做的另一个 QtSerialPort 示例。
| 归档时间: |
|
| 查看次数: |
17547 次 |
| 最近记录: |