我们可以在 cmake 生成器表达式中调用函数吗?
Can we call a function inside a cmake generator expression?
像$<TARGET_OBJECTS:myTarget>
这样的变量可以包含一个列表。为了漂亮地打印它,我想像放破折号一样进行转换,或者其他什么。所以问题很简单:我们可以从生成器表达式调用函数吗?
我知道生成器表达式是在过程结束时计算的,但对我来说这并不意味着它不能调用函数。但是,无法 return 一个值。如果这是可能的,有没有办法在生成器表达式中使用它?
您不能为生成器表达式的结果调用函数,因为生成器表达式是在 配置 阶段之后计算的,当所有执行 CMake 函数。
对于 pretty-printing 列表,您可以使用 $<JOIN>
表达式。
例如,
$<JOIN $<TARGET_OBJECTS:myTarget>,$<COMMA> >
将连接所有对象并在它们之间粘贴 ,
。
I know generator expressions are evaluated at runtime, so the function should also be [evaluated] at runtime.
“运行时间”是什么意思?这不是 CMake 中的事情。有配置时间和生成时间,是不一样的。配置期间的函数 运行 和生成器表达式在生成期间扩展,因此您不能从生成器表达式调用 CMake 函数。
Plus, it's not possible to return a value. If this is possible, is there a way to use it inside generator expressions?
事实上,CMake 中的函数没有 return 个值。
像$<TARGET_OBJECTS:myTarget>
这样的变量可以包含一个列表。为了漂亮地打印它,我想像放破折号一样进行转换,或者其他什么。所以问题很简单:我们可以从生成器表达式调用函数吗?
我知道生成器表达式是在过程结束时计算的,但对我来说这并不意味着它不能调用函数。但是,无法 return 一个值。如果这是可能的,有没有办法在生成器表达式中使用它?
您不能为生成器表达式的结果调用函数,因为生成器表达式是在 配置 阶段之后计算的,当所有执行 CMake 函数。
对于 pretty-printing 列表,您可以使用 $<JOIN>
表达式。
例如,
$<JOIN $<TARGET_OBJECTS:myTarget>,$<COMMA> >
将连接所有对象并在它们之间粘贴 ,
。
I know generator expressions are evaluated at runtime, so the function should also be [evaluated] at runtime.
“运行时间”是什么意思?这不是 CMake 中的事情。有配置时间和生成时间,是不一样的。配置期间的函数 运行 和生成器表达式在生成期间扩展,因此您不能从生成器表达式调用 CMake 函数。
Plus, it's not possible to return a value. If this is possible, is there a way to use it inside generator expressions?
事实上,CMake 中的函数没有 return 个值。