Cmake generator expressions
Cmake generator expressions
我很长一段时间以来要了解发电机表达式(例如 $<xxx:yy>
)在cmake中,何时以及如何使用它们的好处。任何人都可以通过一些例子清楚地解释这一点。许多事先感谢
cmake首先分析项目中的 CMakeLists.txt
文件 - 名为"配置阶段" - 然后生成您的构建环境 - 名为"生成阶段"。
因此,基本上,发电机的表达适用于只有生成器才能知道的一切:
- 目标输出的名称和路径(主要是在交叉编译和多构型环境中)
- 或更一般而言,生成器评估以将编译器/链接器调用的任何目标属性
这是我在项目中使用发电机表达式的示例:
-
将文件复制到可执行文件旁边(在多组合环境中,您不能仅使用诸如
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后构建事件:复制编译库
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
发电机表达式您可以做很多事情,例如file(GENERATE OUTPUT "includes.txt" CONTENT "$<TARGET_PROPERTY:motor,INCLUDE_DIRECTORIES>n" )
cmake链接的库的接口_include_directories
相关文章:
- VSCode C++ 编译的exe感染了Win32:TrojanX-gen[Trj]
- LLVM 编译:目标的配方 '../lib/IR/Release+Asserts/Intrinsics.gen.tmp' failed
- C++11 中对超载'ref(Select::Expressions::Code&)'的调用模棱两可
- "The order of evaluation of expressions is left to right."是什么意思
- auto f = bind(dist<>,gen) 在成员声明C++失败。未被识别为函数
- Cmake generator expressions
- gen~ phasor() 是做什么的?(将 Max/MSP gen 转换为 C++)
- Matlab 编码器错误 "for loop index expressions.." 如何修改代码?
- 为什么标准库不"constant expressions"常见的数学函数?
- 在没有警告(或编译指示)的情况下进行便携式"assign within conditional expressions"的好方法?
- C++11 之前的"Constant expressions"
- pcm_plug.c:67: snd_pcm_plug_close:断言"plug->gen.slave == plug->req_slave"失败
- Lambda Expressions