9

我注意到 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.

我没有在文档中找到关于使用尖括号的语法的任何解释。有没有人使用过这样的语法来解释它的含义?

4

1 回答 1

3

可以使用通常的${FOO}语法取消引用常规 CMake 变量。这些取消引用发生在 CMake 运行期间。

在某些时候,CMake 引入了生成器表达式,其形式为$<FOO>. 从 CMake 的角度来看,这样的表达式是纯字符串。但是,当生成器代码正在运行时(例如,当您运行make或时ninja),它们会被取消引用。

最后,还有<FOO>表达式。这些也是纯字符串,主要用于内部 CMake 代码中,作为后来被命令替换的替代品string(REPLACE ...)。例如,在 CMake 中添加对新语言的支持时,此类表达式被广泛使用,share/cmake/Modules/CMakeAddNewLanguage.txt有关此的更多信息,请参阅。

ExternalProject命令的文档提到了一些<FOO>样式变量。<SOURCE_DIR>并且<BINARY_DIR>显然会被给定外部项目(不是调用的项目${CMAKE_SOURCE_DIR})的真实源代码和构建目录替换,但我无法找到这组命令的可用替换的完整列表。${CMAKE_BINARY_DIR}ExternalProject_*()

于 2012-11-16T12:43:41.323 回答