C++ Cmake生成器表达式
我花了很长时间试图理解在CMake中使用C++ Cmake生成器表达式,c++,cmake,C++,Cmake,我花了很长时间试图理解在CMake中使用$的好处,以及何时和如何使用它们。 谁能举例说明清楚吗。 许多人提前感谢CMake首先解析项目中名为“配置阶段”的CMakeLists.txt文件,然后生成名为“生成阶段”的构建环境 因此,生成器表达式基本上适用于只有生成器才能知道的所有内容: 目标输出的名称和路径(主要在交叉编译和多配置环境中) 或者更一般地说,生成器计算以将编译器/链接器调用混合在一起的任何目标属性 以下是我在项目中使用生成器表达式的示例: 复制可执行文件旁边的文件(在多配置环境中
$
的好处,以及何时和如何使用它们。
谁能举例说明清楚吗。
许多人提前感谢CMake首先解析项目中名为“配置阶段”的
CMakeLists.txt文件,然后生成名为“生成阶段”的构建环境
因此,生成器表达式基本上适用于只有生成器才能知道的所有内容:
- 目标输出的名称和路径(主要在交叉编译和多配置环境中)
- 或者更一般地说,生成器计算以将编译器/链接器调用混合在一起的任何目标属性
以下是我在项目中使用生成器表达式的示例:
复制可执行文件旁边的文件(在多配置环境中,不能只使用变量,如CMAKE\u CURRENT\u BINARY\u DIR
)
使用TARGET\u属性
generator表达式,您可以执行许多操作,例如:
file(GENERATE
OUTPUT "includes.txt"
CONTENT "$<TARGET_PROPERTY:motor,INCLUDE_DIRECTORIES>\n"
)
文件(生成
输出“includes.txt”
内容“$\n”
)
有人能解释清楚吗
-太宽泛了。有人应该重复吗?还是其他手册?否则,请详细说明您不理解的内容,例如,哪个表达式,或者哪个示例。@Tsyvarev我添加了零件的文档,我不理解的$
几乎占生成器表达式使用量的一半。简而言之,其含义是:如果生成器表达式xxx
的计算结果为TRUE(布尔值),则使用生成器表达式yy
的值。否则,将使用空字符串。这种表达式的有用性是:当左生成器表达式的值取决于配置选项,并且构建系统支持多配置(例如Visual Studio)时,则不能使用if
重写此类表达式,因为在此阶段不知道具体配置。
add_custom_command(
TARGET myBinary
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${CMAKE_CURRENT_SOURCE_DIR}/myTest.txt"
"$<TARGET_FILE_DIR:myBinary>/myTest.txt"
)
add_compile_options("$<$<CONFIG:DEBUG>:/MDd>")
file(GENERATE
OUTPUT "includes.txt"
CONTENT "$<TARGET_PROPERTY:motor,INCLUDE_DIRECTORIES>\n"
)