如何检查.pro文件中选定的Qt版本?

彼得罗

我安装了多个版本的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()命令。
有没有更好的方法来做同样的事情?

内曼娅·波里奇(Nemanja Boric)

您可以在此处使用条件函数和范围:

QT_VERSION = 5   # this can be 4, set manually

equals(QT_VERSION, 5){
   QT += widgets
}
equals(QT_VERSION, 4) {
   QT += gui
}

但是,原始代码中需要注意一些事项:

  1. 无需明确定义Qt版本,如果忘记在.pro文件中进行更改,可能会令您头疼。相反,qmake会自动QT_MAJOR_VERSION为您定义一个变量

  2. equals在这种情况下,使用将起作用。但是,如下所述,equals执行字符串比较。但是,最好使用它greaterThanlessThan因为当您尝试使用Qt 6进行编译时(将来的某个时候),您的代码将自动停止工作。

  3. 不需要添加guiQT,因为默认情况下已将其包含在内。

因此,您的代码应为:

greaterThan(QT_MAJOR_VERSION, 4) {
    QT += widgets
}

这是一些未公开的qmake宝石

  • defined(func, type)
    

    如果func已定义,则返回true 否则,返回true type必须为testreplace,以匹配defineTestdefineReplace

  • 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章