如何忽略一些qmake命令?

问题描述

某些QMake项目使用system()命令,这些命令仅应在构建期间执行,并且通常仅在特定的OS上执行,例如:

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

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

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

解决方法

通过将命令包含在!qtc_run {}块或内联条件中,可以禁用此类命令或Qt Creator不想解析的任何其他QMake语句:

!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)

Qt Creator在解析QMake项目时将qtc_run令牌添加到CONFIG变量中,因此在直接运行qmake时不会设置它,并且由于可以使用CONFIG变量对于条件块,您可以按照上面的步骤测试Qt Creator环境。

您还可以使用此技术仅在Qt Creator中运行某些QMake命令,只需使用qtc_run {}而不使用否定运算符即可。