Por que a sintaxe do CMake tem parênteses redundantes em todos os lugares?

CMake'sifs assim:

if (condition)
    ...
else if (...)
    ...
else (...)
    ...
endif (...)

Comelse if (...) a(...) testes para uma condição separada.
Por quêelse (...) e não apenaselse? Por quêendif (...) e nãoendif?

As funções do Cmake são assim:

function(funcname ...)
    ...
endfunction(funcname ...)

Por quêendfunction(funcname ...) e não simplesmenteendfunction?

Eu posso omitir o conteúdo dos parênteses redundantes onde eles aparecem, assim:endif (). Qual é o objetivo dessa construção?

questionAnswers(1)

yourAnswerToTheQuestion