<tfoot id='x7qC7'></tfoot>

      <i id='x7qC7'><tr id='x7qC7'><dt id='x7qC7'><q id='x7qC7'><span id='x7qC7'><b id='x7qC7'><form id='x7qC7'><ins id='x7qC7'></ins><ul id='x7qC7'></ul><sub id='x7qC7'></sub></form><legend id='x7qC7'></legend><bdo id='x7qC7'><pre id='x7qC7'><center id='x7qC7'></center></pre></bdo></b><th id='x7qC7'></th></span></q></dt></tr></i><div id='x7qC7'><tfoot id='x7qC7'></tfoot><dl id='x7qC7'><fieldset id='x7qC7'></fieldset></dl></div>

      • <bdo id='x7qC7'></bdo><ul id='x7qC7'></ul>
      <legend id='x7qC7'><style id='x7qC7'><dir id='x7qC7'><q id='x7qC7'></q></dir></style></legend>
    1. <small id='x7qC7'></small><noframes id='x7qC7'>

    2. Cmake 生成器表达式

      Cmake generator expressions(Cmake 生成器表达式)

      <small id='IGkMV'></small><noframes id='IGkMV'>

            <tbody id='IGkMV'></tbody>

            1. <tfoot id='IGkMV'></tfoot>
              <i id='IGkMV'><tr id='IGkMV'><dt id='IGkMV'><q id='IGkMV'><span id='IGkMV'><b id='IGkMV'><form id='IGkMV'><ins id='IGkMV'></ins><ul id='IGkMV'></ul><sub id='IGkMV'></sub></form><legend id='IGkMV'></legend><bdo id='IGkMV'><pre id='IGkMV'><center id='IGkMV'></center></pre></bdo></b><th id='IGkMV'></th></span></q></dt></tr></i><div id='IGkMV'><tfoot id='IGkMV'></tfoot><dl id='IGkMV'><fieldset id='IGkMV'></fieldset></dl></div>
              <legend id='IGkMV'><style id='IGkMV'><dir id='IGkMV'><q id='IGkMV'></q></dir></style></legend>
                <bdo id='IGkMV'></bdo><ul id='IGkMV'></ul>
                本文介绍了Cmake 生成器表达式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                我很长时间都想了解 生成器表达式,例如 CMake 中的 $,何时以及如何使用它们.任何人都可以用一些例子清楚地解释它.提前致谢

                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 post-build-event:复制编译的库

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

                区分例如DEBUGRELEASE 配置

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

                CMake 没有选择链接的 INTERFACE_INCLUDE_DIRECTORIES图书馆

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

                本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                相关文档推荐

                What is inside .lib file of Static library, Statically linked dynamic library and dynamically linked dynamic library?(静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么?)
                How do I load a C DLL from the SXS in Python?(如何从 Python 中的 SXS 加载 C DLL?)
                Can Cython code be compiled to a dll so C++ application can call it?(Cython 代码可以编译成 dll 以便 C++ 应用程序可以调用它吗?)
                Delay Loading DLLs(延迟加载 DLL)
                Throwing C++ exceptions across DLL boundaries(跨 DLL 边界抛出 C++ 异常)
                Loading a dll from a dll?(从 dll 加载 dll?)
                  • <bdo id='Mfv9L'></bdo><ul id='Mfv9L'></ul>

                    <i id='Mfv9L'><tr id='Mfv9L'><dt id='Mfv9L'><q id='Mfv9L'><span id='Mfv9L'><b id='Mfv9L'><form id='Mfv9L'><ins id='Mfv9L'></ins><ul id='Mfv9L'></ul><sub id='Mfv9L'></sub></form><legend id='Mfv9L'></legend><bdo id='Mfv9L'><pre id='Mfv9L'><center id='Mfv9L'></center></pre></bdo></b><th id='Mfv9L'></th></span></q></dt></tr></i><div id='Mfv9L'><tfoot id='Mfv9L'></tfoot><dl id='Mfv9L'><fieldset id='Mfv9L'></fieldset></dl></div>

                      • <tfoot id='Mfv9L'></tfoot>

                        1. <legend id='Mfv9L'><style id='Mfv9L'><dir id='Mfv9L'><q id='Mfv9L'></q></dir></style></legend>
                        2. <small id='Mfv9L'></small><noframes id='Mfv9L'>

                            <tbody id='Mfv9L'></tbody>