CMake 占位符如何工作?

Mat*_* G. 5 cmake

在 CMake 的支持库中,您将看到如下所示的命令定义:

 set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT "<CMAKE_ASM${ASM_DIALECT}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
Run Code Online (Sandbox Code Playgroud)

/usr/share/cmake-3.5/Modules/CMakeASMInformation.cmake例如在我的安装中)

这里关注我的对象是占位符(短语得到这里)<DEFINES> <INCLUDES> <FLAGS>; 我试图弄清楚它们如何与 CMake 的其余部分进行交互。

鉴于我能够通过设置将标志传递给我的汇编程序CMAKE_ASM-ATT_FLAGS,我有点认为可能有一些魔法将占位符映射到变量名称......但设置CMAKE_ASM-ATT_INCLUDES似乎没有做任何事情。

那么<INCLUDES>这里怎么会有人呢?可以以特定于目标的方式填充吗?

Tsy*_*rev 4

占位符的起源有一点神奇:

  • <DEFINES> 由add_definitionstarget_compile_definitions命令和相应的属性填充,

  • <INCLUDES> 由include_directories填充,target_include_directories因此,

  • <FLAGS> 由 填充add_compile_optionstarget_compile_options因此加上CMAKE_<LANG>_FLAGS变量及其特定于配置的对,

  • <SOURCE> 是源文件,

  • <OBJECT>是对应的对象。

也就是说,影响 C/C++ 程序构建的所有内容都会影响(在语言适应后)其他语言的库/可执行文件。