有关CMake专家的问题。
根据CMake function documentation,函数根本不会返回任何内容。要更改变量值,必须将其传递给函数,并在函数内部设置指定PARENT_SCOPE
选项的新值。
好吧,这是CMake的一个众所周知的特色。
我的问题不是关于如何,而是关于为什么:为什么CMake函数不返回值?背后的想法是什么?
例如,函数不能在if
表达式中使用,也不能在set
命令中调用。
如果我没记错的话,它与autotools一样,因此我认为这不是偶然的。
是否有专家知道为什么?
答案 0 :(得分:2)
您可以在CMake的邮件列表中的Ken Martin中找到message的部分答案:
关于返回值的函数的一般问题 可以做到,但这是一个很大的变化。功能和命令 对使用它们的人看起来一样(并且应该使用相同的IMO)。 所以我们真的在谈论返回值的命令。这是 大多只是语法问题。现在我们有
command(arg arg arg
)
支持返回值,我们需要一些可以处理
的东西
command (arg command2(arg arg) arg arg
)
或在你的情况下
if(assertdef(foo))
或在另一种情况下
set(foo get_property(
))
等。这会击中CMake中的解析器和参数处理但是我 认为可以做到。我想我不确定是否应该这样做。 在这里公开意见。