我想检查我是否在Mac OS X中,并具有以下代码
cmake_minimum_required (VERSION 3.0)
project (test)
set (FOO 1)
if (${FOO} AND ${APPLE})
message ("MAC OS X")
endif ()
在非OSX系统上失败,并显示错误消息
CMake Error at CMakeLists.txt:4 (if):
if given arguments:
"1" "AND"
Unknown arguments specified
如果我替换${APPLE}
为APPLE
,错误就消失了。但是我对此有些疑惑。我们何时应使用引用变量,${VAR}
何时不引用?
提前致谢。
简而言之:if括号内的所有内容均作为表达式求值,这就是if
关键字的语义。因此,如果放置APPLE
在此处,它将被评估为变量名并产生正确的结果。
现在,如果您放在${APPLE}
那里,${}
将在 if
评估表达式之前先评估其内容。因此,就如同您写的一样
if (1 AND )
(在APPLE
未设置变量的情况下,在非OSX系统上就是这种情况)。这是无效的语法,并产生您得到的错误。您应该写:
if (FOO AND APPLE)
引用CMake文档:
if命令是在CMake的历史中很早就编写的,它早于$ {}变量评估语法,并且为了方便起见,评估了由其参数命名的变量,如上面的签名所示。请注意,在if命令甚至接收到参数之前,使用$ {}进行普通变量评估。因此,代码如下:
set(var1 OFF)
set(var2 "var1")
if(${var2})
在if命令中显示为:
if(var1)
并根据上述if()情况进行评估。结果为OFF,这是错误的。但是,如果我们从示例中删除$ {},则该命令将看到:
if(var2)
这是正确的,因为var2被定义为“ var1”,这不是一个假常量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句