为什么CMake函数不能返回值?

时间:2017-09-29 08:56:37

标签: cmake

有关CMake专家的问题。 根据CMake function documentation,函数根本不会返回任何内容。要更改变量值,必须将其传递给函数,并在函数内部设置指定PARENT_SCOPE选项的新值。 好吧,这是CMake的一个众所周知的特色。

我的问题不是关于如何,而是关于为什么:为什么CMake函数不返回值?背后的想法是什么? 例如,函数不能在if表达式中使用,也不能在set命令中调用。 如果我没记错的话,它与autotools一样,因此我认为这不是偶然的。

是否有专家知道为什么

1 个答案:

答案 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中的解析器和参数处理但是我   认为可以做到。我想我不确定是否应该这样做。   在这里公开意见。