我有以下简单的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
作为输出。如何在配置过程中打印生成的生成器表达式的结果?
答案 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)
由于生成器表达式是在生成过程中计算的
构建系统,而不是在处理 CMakeLists.txt
文件期间,它是
无法使用 message()
命令检查其结果。
生成调试消息的一种可能方法是添加自定义目标,
add_custom_target(genexdebug COMMAND ${CMAKE_COMMAND} -E echo "$<...>")
shell 命令 make genexdebug
(执行后调用
cmake
) 然后将打印 $<...>
的结果。
另一种方法是将调试消息写入文件:
file(GENERATE OUTPUT filename CONTENT "$<...>")