Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Cmake生成器表达式_C++_Cmake - Fatal编程技术网

C++ Cmake生成器表达式

C++ Cmake生成器表达式,c++,cmake,C++,Cmake,我花了很长时间试图理解在CMake中使用$的好处,以及何时和如何使用它们。 谁能举例说明清楚吗。 许多人提前感谢CMake首先解析项目中名为“配置阶段”的CMakeLists.txt文件,然后生成名为“生成阶段”的构建环境 因此,生成器表达式基本上适用于只有生成器才能知道的所有内容: 目标输出的名称和路径(主要在交叉编译和多配置环境中) 或者更一般地说,生成器计算以将编译器/链接器调用混合在一起的任何目标属性 以下是我在项目中使用生成器表达式的示例: 复制可执行文件旁边的文件(在多配置环境中

我花了很长时间试图理解在CMake中使用
$
的好处,以及何时和如何使用它们。 谁能举例说明清楚吗。
许多人提前感谢

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

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

  • 目标输出的名称和路径(主要在交叉编译和多配置环境中)
  • 或者更一般地说,生成器计算以将编译器/链接器调用混合在一起的任何目标属性
以下是我在项目中使用生成器表达式的示例:

  • 复制可执行文件旁边的文件(在多配置环境中,不能只使用变量,如
    CMAKE\u CURRENT\u BINARY\u DIR

  • 使用
    TARGET\u属性
    generator表达式,您可以执行许多操作,例如:

    file(GENERATE 
        OUTPUT "includes.txt" 
        CONTENT "$<TARGET_PROPERTY:motor,INCLUDE_DIRECTORIES>\n"
    )
    
    文件(生成
    输出“includes.txt”
    内容“$\n”
    )
    


  • 有人能解释清楚吗
    -太宽泛了。有人应该重复吗?还是其他手册?否则,请详细说明您不理解的内容,例如,哪个表达式,或者哪个示例。@Tsyvarev我添加了零件的文档,我不理解的
    $
    几乎占生成器表达式使用量的一半。简而言之,其含义是:如果生成器表达式
    xxx
    的计算结果为TRUE(布尔值),则使用生成器表达式
    yy
    的值。否则,将使用空字符串。这种表达式的有用性是:当左生成器表达式的值取决于配置选项,并且构建系统支持多配置(例如Visual Studio)时,则不能使用
    if
    重写此类表达式,因为在此阶段不知道具体配置。
    add_custom_command(
        TARGET myBinary 
        POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy  
                         "${CMAKE_CURRENT_SOURCE_DIR}/myTest.txt" 
                         "$<TARGET_FILE_DIR:myBinary>/myTest.txt"
    )
    
    add_compile_options("$<$<CONFIG:DEBUG>:/MDd>")
    
    file(GENERATE 
        OUTPUT "includes.txt" 
        CONTENT "$<TARGET_PROPERTY:motor,INCLUDE_DIRECTORIES>\n"
    )