CMake生成器表达式 [英] Cmake generator expressions
问题描述
我正努力了解生成器表达式,例如CMake中的 $< xxx:yy>
,以及何时以及如何使用它们。
谁能用一些例子清楚地解释它。
非常感谢
I'm trying for long time to understand the benefit of generator expressions such as $<xxx:yy>
in CMake, when and how to use them.
Can anybody explain it clearly with some examples.
Many thank in advance
推荐答案
CMake会首先解析 CMakeLists.txt $项目中的c $ c>文件-称为配置阶段,然后生成生成环境-称为生成阶段。
CMake does first parse the CMakeLists.txt
files in your project - named "Configuration Phase" - and then it generates your build environment - named "Generation Phase".
因此,基本上,生成器表达式是仅生成器知道的所有内容:
So basically the generator expressions are for everything only the generator could know:
- 目标输出的名称和路径(主要是在交叉编译和多配置环境中)
- 或更一般地说,生成器评估以将编译器/链接器调用混合在一起的任何目标属性
以下是在项目中使用生成器表达式的示例:
Here are examples where I use generator expressions in my project:
-
在可执行文件旁边复制文件(在多配置中环境中,您不能仅使用
CMAKE_CURRENT_BINARY_DIR
)
add_custom_command(
TARGET library1
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"$<TARGET_FILE:library1>"
"$<TARGET_FILE_DIR:mainProject>/$<TARGET_FILE_NAME:library1>"
)
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>")
对于Cmake ,您可以使用add_compiler_flags()命令修改发布/调试编译器标志吗?
使用 TARGET_PROPERTY
生成器表达式,您可以做很多事情,例如
With the TARGET_PROPERTY
generator expression you could do a lot of things e.g.
file(GENERATE
OUTPUT "includes.txt"
CONTENT "$<TARGET_PROPERTY:motor,INCLUDE_DIRECTORIES>\n"
)
CMake无法获取链接库的INTERFACE_INCLUDE_DIRECTORIES
这篇关于CMake生成器表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!