cmake 如何计算/展开生成器表达式内部的生成器表达式?

yc0p9oo0  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(174)

我目前正在做一个项目,需要使用生成器表达式来获取CMake目标的一些属性。

cmake_minimum_required(VERSION 3.20)
project(fruit_proj)

add_custom_target(banana)
set_target_properties(banana PROPERTIES COLOR "yellow")

add_custom_target(fruit)
set_target_properties(fruit PROPERTIES COLOR $<TARGET_PROPERTY:banana,COLOR>)

file(GENERATE OUTPUT color.txt CONTENT $<TARGET_PROPERTY:fruit,COLOR>)

请注意$<TARGET_PROPERTY>产生器运算式的链接用法,此运算式会取得fruitCOLOR属性值,其本身也是产生器运算式,可取得bananaCOLOR属性。
我希望生成的color.txt文件的内容是

yellow

而事实上

$<TARGET_PROPERTY:banana,COLOR>

即仅对第一生成器表达式求值。
是否有任何方法可以递归地计算生成器表达式以获得所需的输出,或者在CMake中不可能?
期待您的建议:)
PS:我不能使用get_target_property,因为目标生成的顺序不能保证。

vnzz0bqm

vnzz0bqm1#

如果生成器表达式的结果本身就是一个生成器表达式,那么对于要计算的get inner expression,用$<GENEX_EVAL>:

file(GENERATE OUTPUT color.txt CONTENT $<GENEX_EVAL:$<TARGET_PROPERTY:fruit,COLOR>>)

相关问题