gpt4 book ai didi

c++ - Cmake 生成器表达式

转载 作者:IT老高 更新时间:2023-10-28 21:44:26 26 4
gpt4 key购买 nike

我尝试了很长时间来了解 generator expressions 的好处如$<xxx:yy>在 CMake 中,何时以及如何使用它们。任何人都可以用一些例子清楚地解释它。非常感谢提前

最佳答案

CMake 确实首先解析您项目中的 CMakeLists.txt 文件 - 名为“配置阶段” - 然后生成构建环境 - 名为“生成阶段”。

所以基本上,生成器表达式适用于只有生成器才能知道的所有内容:

  • 目标输出的名称和路径(主要在交叉编译和多配置环境中)
  • 或者更一般地说,生成器评估以将编译器/链接器调用混合在一起的任何目标属性

以下是我在项目中使用生成器表达式的示例:

  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 post-build-event: copy compiled libraries

    add_custom_command(
    TARGET myBinary
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy
    "${CMAKE_CURRENT_SOURCE_DIR}/myTest.txt"
    "$<TARGET_FILE_DIR:myBinary>/myTest.txt"
    )

    how do I add external test files to a cmake project

  2. 区分例如DEBUGRELEASE 配置

    add_compile_options("$<$<CONFIG:DEBUG>:/MDd>")

    For Cmake, can you modify the release/debug compiler flags with `add_compiler_flags()` command?

    Modern way to set compiler flags in cross-platform cmake project

  3. 使用 TARGET_PROPERTY 生成器表达式,您可以做很多事情,例如

    file(GENERATE 
    OUTPUT "includes.txt"
    CONTENT "$<TARGET_PROPERTY:motor,INCLUDE_DIRECTORIES>\n"
    )

    CMake doesn't pick up INTERFACE_INCLUDE_DIRECTORIES of linked library

关于c++ - Cmake 生成器表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46206495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com