Cmake generator expressions(Cmake 生成器表达式)
问题描述
我很长时间都想了解 生成器表达式,例如 CMake 中的 $
,何时以及如何使用它们.任何人都可以用一些例子清楚地解释它.提前致谢
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
文件 - 名为配置阶段" - 然后生成您的构建环境- 命名为生成阶段".
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>"
)
CMake post-build-event:复制编译的库
add_custom_command(
TARGET myBinary
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${CMAKE_CURRENT_SOURCE_DIR}/myTest.txt"
"$<TARGET_FILE_DIR:myBinary>/myTest.txt"
)
如何添加外部测试文件到一个 cmake 项目
区分例如DEBUG
或 RELEASE
配置
add_compile_options("$<$<CONFIG:DEBUG>:/MDd>")
对于Cmake,你能用`add_compiler_flags()`命令修改发布/调试编译器标志吗?
设置编译器标志的现代方法跨平台cmake项目
使用 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>
"
)
CMake 没有选择链接的 INTERFACE_INCLUDE_DIRECTORIES图书馆
这篇关于Cmake 生成器表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Cmake 生成器表达式
基础教程推荐
- 从 std::cin 读取密码 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01