Cmake generator expressions

Cmake generator expressions

本文关键字:expressions generator Cmake      更新时间:2023-10-16

我很长一段时间以来要了解发电机表达式(例如 $<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后构建事件:复制编译库

    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项目

  2. 区分例如DEBUGRELEASE配置

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

    对于cmake,您可以使用add_compiler_flags()`命令?

    修改版本/调试编译器标志

    在跨平台CMAKE项目中设置编译器标志的现代方法

  3. 使用TARGET_PROPERTY发电机表达式您可以做很多事情,例如

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

    cmake链接的库的接口_include_directories