CMake ENDIF和ELSE参数的目的

时间:2015-04-06 13:50:12

标签: cmake

在CMake中,ELSEENDIF控制流函数将表达式作为参数。根据文档,这些是optional。那么这些目的是什么?是仅仅为了维护目的而使原始IF表达式更清晰,还是它提供了一些功能?

4 个答案:

答案 0 :(得分:9)

如您所说,这些表达式是可选的,当您嵌套if()语句时它们很有用 - 当expr中的endif()expr不匹配时,cmake会发出警告最近的if()

同样适用于else()

简单 - 这可以保护您免受if() else() endif()嵌套链中的错误。

答案 1 :(得分:5)

版本2.6.0之前需要else()和endif()的参数。来自CMake FAQ

  

从CMake 2.6.0开始,ELSE()和ENDIF()结构可以为空。在ENDMACRO(),ENDFUNCTION()和ENDFOREACH()上关闭构造也是如此。如果您需要2.4.x兼容性,CMake 2.4.3或更高版本可识别CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS选项(在2.6.0中是多余的)

除了帮助提高可读性之外,它们似乎没有任何功能。 另请参阅this excellent answer

答案 2 :(得分:3)

可选参数可以更容易地找到匹配的if / else / endif部分,因此它是为了更好的可读性。

我个人不使用这些参数,因为我发现其他语句else(condition)真的很混乱,如

if(condition)
   // do something
else(condition)
   // do something else
endif(condition)

我经常误导else(condition)elseif(condition)

答案 3 :(得分:1)

并不是else和endif是可选的。 inside()中的表达式是可选的。来自文档:

  

请注意,else和endif子句中的表达式是可选的。

以前版本的cmake要求你在else和endif中重复这个条件:

if(FOO)
...
else(FOO)
...
endif(FOO)