如何在CMake中输出生成器表达式的结果?

时间:2018-07-15 23:56:29

标签: cmake

我有以下简单的CMake代码:

xargs

我希望此代码能打印出>/dev/null,但不会。相反,我得到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 作为输出。如何在配置过程中打印生成的生成器表达式的结果?

3 个答案:

答案 0 :(得分:10)

  

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

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

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

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

有关file(GENERATOR)的详细说明,请参见documentation

答案 1 :(得分:6)

您可以添加一个自定义命令,该命令在构建时回显该值。这是我在需要时执行的操作:

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

答案 2 :(得分:2)

From the documentation

<块引用>

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

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

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

shell 命令 make genexdebug(执行后调用 cmake) 然后将打印 $<...> 的结果。

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

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