我注意到 CMake 不仅可以使用 ${VAR_NAME}
语法中的变量,还可以使用 <VAR_NAME>
语法中的变量。例如,以下代码:
IF(NOT CMAKE_CXX_LINK_EXECUTABLE)
SET(CMAKE_CXX_LINK_EXECUTABLE
"<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
ENDIF(NOT CMAKE_CXX_LINK_EXECUTABLE)
在名为CMakeCXXInformation.cmake
的脚本中,在CMake模块文件夹中找到了它。
我没有在文档中找到有关使用尖括号语法的解释。有人使用过这样的语法吗,可以解释一下其含义吗?
<VAR>
是普通字符串。它不是CMake语言的一部分。我想,CMake开发人员有意使它们不同,以避免混淆。 - arrowd<VAR>
除了可能稍后被某种字符串解析函数替换外,没有任何意义吗?看起来是这样,但我不太明白为什么cmake甚至使用这些占位符。如果你好奇,我来到这里的原因是有一行代码在我继承的代码中使用了<BINARY_DIR>
,我也以为它是一个占位符,但显然它以某种方式被赋值了...?即使我认为只有${BINARY_DIR}
可以用来获取变量的值,它也会返回一个真实路径。 - jrh$<var>
形式的,但我更想了解没有美元符号的情况,例如只有<var>
。我的测试似乎表明这可能是ExternalProject_Add特定的情况,但我不确定谁评估这些表达式,是被添加的外部项目还是添加外部项目的项目。 - jrh