CMake生成器表达式 [英] Cmake generator expressions

查看:647
本文介绍了CMake生成器表达式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正努力了解生成器表达式,例如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 文件-称为配置阶段,然后生成生成环境-称为生成阶段。

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:


  1. 在可执行文件旁边复制文件(在多配置中环境中,您不能仅使用 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项目中

区分例如调试发布配置

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>\n"
)

CMake无法获取链接库的INTERFACE_INCLUDE_DIRECTORIES

这篇关于CMake生成器表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆