QMake中的变量比较

bea*_*akr 6 variables qt arguments qmake

我知道在QMake中你可以使用$$语法来添加自定义变量参数,如下所示:

# In .pro
message($$FOO)
# In shell
$ qmake 'FOO="ABC"'
Run Code Online (Sandbox Code Playgroud)

我也知道你可以使用conditonals检查当前平台之类的东西:

win32 {
    # ...
}
Run Code Online (Sandbox Code Playgroud)

使用这些语法的组合,您将如何定义条件以检查变量参数是否等于值?

# I want something like this:
$$FOO == "..." {
    # ...
}
Run Code Online (Sandbox Code Playgroud)

bea*_*akr 5

阅读一些内容后,我找到了自己问题的答案。有一个equals可以使用的QMake函数,尽管您必须为局部变量分配variable参数的值才能在该函数中使用它:

F = $$FOO
equals(F, bar) {
  message("FOO is bar")
}
Run Code Online (Sandbox Code Playgroud)

现在您可以运行:

$ qmake FOO=bar
=> Project MESSAGE: FOO is bar
Run Code Online (Sandbox Code Playgroud)


lpa*_*app 5

这就是我们在QtSerialPort中使用的内容:

equals(variablename,value)

测试variablename是否等于字符串值.

例如:

TARGET = helloworld equals(TARGET,"helloworld"){message("目标任务成功.")}

你也可以使用这个"for not equal"检查通常的方法如下:

!equals(a, b) { ... }
Run Code Online (Sandbox Code Playgroud)

您需要注意这一点,因为几个qmake函数(包括此函数)需要有一个局部变量才能使用.仅将值传递给qmake并将变量打印出来是不够的.这对qmake来说有点愚蠢.

严格来说,您也可以使用以下函数进行比较,但这不是首选:

与eval(String)

使用qmake语法规则计算字符串的内容并返回true.可以在字符串中使用定义和赋值来修改现有变量的值或创建新定义.

例如:

eval(TARGET = myapp) {
    message($$TARGET)
}
Run Code Online (Sandbox Code Playgroud)