【问题标题】:How do I output the result of a generator expression in CMake?如何在 CMake 中输出生成器表达式的结果?
【发布时间】:2018-07-15 23:56:29
【问题描述】:

我有以下简单的 CMake 代码:

cmake_minimum_required(VERSION 3.1)

project(PrintGenerators)

set(TEST_OR_GENERATOR "$<$<OR:0,0,1>:YAY!>")

message(STATUS ${TEST_OR_GENERATOR}) # Print out the result of the build

我希望这段代码能打印出YAY!,但事实并非如此。相反,我得到$&lt;$&lt;OR:0,0,1&gt;:YAY!&gt; 作为输出。如何在配置期间打印评估生成器表达式的结果?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    如何在配置过程中打印生成器表达式的计算结果?

    你不能。生成器表达式适用于在配置阶段并不完全了解的事物:它们取决于构建类型,在多配置generators 的情况下,仅在构建阶段才知道。

    但是,您可以将生成器表达式的值保存到文件中,但文件只会在配置阶段结束时写入:

    file(GENERATE OUTPUT <filename> CONTENT <string-with-generator-expression>)
    

    file(GENERATOR)的更详细描述见documentation

    【讨论】:

      【解决方案2】:

      您可以添加在构建时回显该值的自定义命令。当我需要它时,我就是这样做的:

      add_custom_command(TARGET mytarget POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E echo 
        "target dir = $<TARGET_FILE_DIR:mytarget>")
      

      【讨论】:

      • 我意识到了这一点;这个问题的重点是能够在配置时打印值。
      • 这个答案比公认的有什么优势?
      【解决方案3】:

      From the documentation

      由于生成器表达式是在生成 构建系统,而不是在处理 CMakeLists.txt 文件期间,它是 无法使用message() 命令检查它们的结果。

      生成调试消息的一种可能方法是添加自定义目标,

      add_custom_target(genexdebug COMMAND ${CMAKE_COMMAND} -E echo "$<...>")
      

      shell命令make genexdebug(执行后调用 cmake) 将打印 $&lt;...&gt; 的结果。

      另一种方法是将调试消息写入文件:

      file(GENERATE OUTPUT filename CONTENT "$<...>")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 2016-03-27
        相关资源
        最近更新 更多