我有以下简单的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!
,但实际上没有。我得到的是$<$<OR:0,0,1>:YAY!>
作为输出。我如何在配置过程中输出计算后的生成器表达式的结果?
4条答案
按热度按时间m1m5dgzv1#
如何在配置期间打印计算的生成器表达式的结果?
不能。生成器表达式用于在配置阶段不完全知道的情况:它们取决于构建类型,在多配置generators的情况下,只有在 * 构建阶段 * 才知道构建类型。
但是,您可以将生成器表达式的值保存到文件中,但仅在配置阶段结束时才会写入该文件:
有关
file(GENERATOR)
的详细说明,请参阅文档。ckocjqey2#
您可以添加一个自定义命令,在构建时响应该值。当我需要它时,我是这样做的:
kt06eoxx3#
来自文档
由于生成器表达式是在生成buildsystem期间计算的,而不是在处理
CMakeLists.txt
文件期间计算的,因此无法使用message()
命令检查其结果。生成调试消息的一种可能方法是添加自定义目标,
shell命令
make genexdebug
(在执行cmake
之后调用)将打印$<...>
的结果。另一种方法是将调试消息写入文件:
zxlwwiss4#
由于生成器表达式是在生成buildsystem期间计算的,而不是在处理
CMakeLists.txt
文件期间计算的,因此无法使用message()
命令检查其结果。生成调试消息的一种可能方法是使用file(GENERATE)
将调试消息写入文件:reference