【问题标题】:How to ignore some qmake commands?如何忽略一些 qmake 命令?
【发布时间】:2020-09-21 18:15:47
【问题描述】:

一些 QMake 项目使用 system() 命令,这些命令仅在构建期间执行,通常仅用于特定操作系统,例如:

win32:system(cmd.exe /E myscript.bat)

从历史上看,Qt Creator 在解析 .pro/.pri 文件时会忽略此类命令。但从 Qt Creator 4.13.0 开始,它现在在项目加载期间运行它们,这可能会导致意外操作或失败。

我们如何告诉 Qt Creator 不要解析 .pro/.pri 文件中的特定语句或块,以便它们只能由 QMake 本身执行?

【问题讨论】:

  • @eyllanesc 感谢编辑,但标题中确实是 Qt Creator,而不是 Qt。诀窍在于 Qt Creator 本身解析 QMake 项目文件。我不认为“如何让 Qt 忽略我的 .pro 文件中的一些 QMake 命令”是准确的。
  • 如果您更好地分析您的问题,您将看到它独立于 QtCreator,如果您打开终端并在没有 QtCreator 的情况下编译项目,您将看到该命令有效。

标签: qt qmake


【解决方案1】:

您可以禁用此类命令,或者您不希望 Qt Creator 解析的任何其他 QMake 语句,方法是将命令包含在 !qtc_run {} 块或内联条件中:

!qtc_run {
    win32:system(copy myfile.txt dest\\folder)
    else:system(cp myfile.txt dest/folder)
}

!qtc_run:win32:system(cmd.exe /E myscript.bat)

qtc_run 标记是 Qt Creator 在解析 QMake 项目时添加到 CONFIG 变量中的,因此直接运行 qmake 时不会设置它,并且由于 CONFIG 变量可以用于条件块,因此您可以如上所述测试 Qt Creator 环境。

您也可以使用此技术仅在 Qt Creator 中运行一些 QMake 命令,只需使用不带否定运算符的 qtc_run {}

【讨论】:

    猜你喜欢
    • 2011-05-24
    • 2011-04-10
    • 2014-12-15
    • 2021-09-09
    • 2010-10-30
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 2022-11-09
    相关资源
    最近更新 更多