我们可以在 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 个值。