在CMake中ELSE,ENDIF控制流函数将表达式作为参数.根据文档,这些是可选的.那么这些目的是什么?是仅仅IF为了维护目的使原始表达更清楚,还是它提供了一些功能?
这些表达式是可选的,如你所说的那样,当你有嵌套if()语句时它们很有用- 当输入时expr,cmake会在最近的位置endif()不匹配时发出警告.exprif()
同样的else().
简单 - 这可以保护您免受if() else() endif()嵌套链中的错误.
在版本2.6.0之前,else()和endif()的参数是必需的.来自CMake常见问题解答:
从CMake 2.6.0开始,ELSE()和ENDIF()结构可以为空.在ENDMACRO(),ENDFUNCTION()和ENDFOREACH()上关闭构造也是如此.如果您需要2.4.x兼容性,CMake 2.4.3或更高版本可识别CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS选项(在2.6.0中是多余的)
除了帮助提高可读性之外,它们似乎没有任何功能.另见这个优秀的答案.