cmake 递归链接TARGET_PROPERTY中的生成器表达式

bvuwiixz  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(184)

我目前正在做一个项目,需要使用生成器表达式来获取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,因为目标生成的顺序不能保证。

kdfy810k

kdfy810k1#

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

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

相关问题