在 QtCreator 4.2.0 中,我尝试使用一个 *.pro 文件为多种硬件配置构建二进制文件。

Build & Run => Build Settings => Build Enviroment 中,我定义环境变量 TARGET 如下:

  • build设置 A:变量 TARGET 的值为 bbb
  • build设置 B:变量 TARGET 具有值 desktop

pro 文件中,我使用了以下测试函数:

equals($$TARGET,"bbb") 
{ 
    message("setting include paths for bbb")) 
    message($$TARGET) 
} 
 
equals($$TARGET,"laptop") 
{ 
    message("setting include paths for laptop.") 
    message($$TARGET) 
} 
 
contains($$TARGET,"*bbb*") 
{ 
    message("setting include paths for bbb")) 
    message($$TARGET) 
} 
 
contains($$TARGET,"*laptop*") 
{ 
    message("setting include paths for laptop.") 
    message($$TARGET) 
} 

我在运行 qmake 时得到了这个输出:

Project MESSAGE: setting include paths for bbb 
Project MESSAGE: bbb 
Project MESSAGE: setting include paths for laptop. 
Project MESSAGE: bbb 
Project MESSAGE: setting include paths for bbb 
Project MESSAGE: bbb 
Project MESSAGE: setting include paths for laptop. 
Project MESSAGE: bbb 
Project MESSAGE: setting include paths for bbb 

这对我来说毫无意义,我不知道我在这里做错了什么。为什么从 laptop 执行测试后的部分?

顺便说一下,我使用Scopes 解决了我的问题。这对我来说很完美:

CONFIG += $$(TARGET_HW) 
desktop { 
    message("setting include paths for laptop.") 
} 
 
cetec { 
    message("setting include paths for cetec.")) 
} 

但我仍然对使用测试函数的正确方法感兴趣。

请您参考如下方法:

我为第一个测试提供了正确的语法,例如:

equals(TARGET,"bbb") { 
    message("setting include paths for bbb")) 
    message($$TARGET) 
} 

请注意:

  1. 大括号在测试的同一行。
  2. 测试的变量没有美元符号,只有变量名


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!