我有以下简单的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
Run Code Online (Sandbox Code Playgroud)
我希望这段代码可以打印出来YAY!,但事实并非如此.我改为$<$<OR:0,0,1>:YAY!>输出.如何在配置期间打印评估的生成器表达式的结果?
Tsy*_*rev 14
如何在配置期间打印评估的生成器表达式的结果?
你不能.生成器表达式适用于在配置阶段不完全已知的事物:它们依赖于构建类型,在多构造生成器的情况下,仅在构建阶段才知道它.
但是,您可以将生成器表达式的值保存到文件中,但该文件仅在配置阶段结束时写入:
file(GENERATE OUTPUT <filename> CONTENT <string-with-generator-expression>)
Run Code Online (Sandbox Code Playgroud)
有关详细说明,file(GENERATOR)请参阅文档.
Mar*_*ram 12
由于生成器表达式是在生成构建系统期间而不是在处理
CMakeLists.txt文件期间评估的,因此无法使用该message()命令检查其结果。生成调试消息的一种可能方法是添加自定义目标,
Run Code Online (Sandbox Code Playgroud)add_custom_target(genexdebug COMMAND ${CMAKE_COMMAND} -E echo "$<...>")shell 命令
make genexdebug(在执行 后调用cmake)将打印 的结果$<...>。另一种方法是将调试消息写入文件:
Run Code Online (Sandbox Code Playgroud)file(GENERATE OUTPUT filename CONTENT "$<...>")
小智 6
您可以添加在构建时回显值的自定义命令.这就是我在需要时这样做的方式:
add_custom_command(TARGET mytarget POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo
"target dir = $<TARGET_FILE_DIR:mytarget>")
Run Code Online (Sandbox Code Playgroud)