在CMake中,ELSE
和ENDIF
控制流函数将表达式作为参数。根据文档,这些是optional。那么这些目的是什么?是仅仅为了维护目的而使原始IF
表达式更清晰,还是它提供了一些功能?
答案 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)