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

如何在CMake中输出生成器表达式的结果?,cmake,Cmake,我有以下简单的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 cmake_最低要求(3.1版) 项目(打印生成器) 设置(测试单元或单元生成

我有以下简单的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
cmake_最低要求(3.1版)
项目(打印生成器)
设置(测试单元或单元生成器“$”)
消息(状态${TEST_或_GENERATOR})#打印生成的结果
我希望这段代码打印出来
YAY,但它不是。相反,我将
$
作为输出。如何在配置期间打印已计算的生成器表达式的结果

如何在配置期间打印已计算的生成器表达式的结果

你不能。生成器表达式用于在配置阶段不完全已知的内容:它们取决于构建类型,在多配置的情况下,构建类型仅在构建阶段已知

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

file(GENERATE OUTPUT <filename> CONTENT <string-with-generator-expression>)
文件(生成输出内容)

有关
文件(生成器)
的详细说明,请参见。

您可以添加一个自定义命令,在生成时回显该值。这就是我在需要时所做的:

add_custom_command(TARGET mytarget POST_BUILD
  COMMAND ${CMAKE_COMMAND} -E echo 
  "target dir = $<TARGET_FILE_DIR:mytarget>")
add_custom_命令(TARGET mytarget POST_BUILD
命令${CMAKE_COMMAND}-E echo
“目标目录=$”)

因为生成器表达式是在生成 buildsystem,而不是在处理
CMakeLists.txt
文件的过程中,它是 无法使用
message()
命令检查其结果

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

add_custom_目标(genexdebug命令${CMAKE_命令}-E echo“$”

shell命令
make genexdebug
(执行后调用 然后将打印
$
的结果

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

文件(生成输出文件名内容“$”


我知道这一点;这个问题的重点是能够在配置时打印值。与公认的答案相比,这个答案有什么优点?