CMake 函数参数——为什么它们偶尔是大写的?

CMake function arguments -- why are they occasionally uppercase?

我一直在梳理 CMake 文档一段时间,现在试图找出为什么有些函数参数大写而有些没有。我希望有人能够解释事物被资本化的模式,或者至少向我指出文档的方向。该文档 https://cmake.org/cmake/help/v3.0/manual/cmake-language.7.html#cmake-language-7 几乎没有解释为什么某些东西被大写。

以我目前的理解, 大写参数可以是:

小写参数是:

这是一个 CMake 文件的示例,您可以帮我分析一下吗?

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

include(SomeLib)

include_directories(include)

add_library(mylib SHARED src/main.cpp)

target_link_libraries(mylib ${boost_LIBRARIES})

install(TARGETS mylib DESTINATION lib)

VERSION 我猜是关键字, SHARED 可能也是关键字,或者可能是 属性, TARGETSDESTINATION也是关键词?

编写 CMake 代码没有某种公认的风格,因此您可能会遇到任何问题。您通常看到的是开发人员 (Kitware) 使用的历史上某种程度上被接受的样式,并被许多其他人采用。

通常您对 CMake 命令、宏和函数名称使用小写字母,因此要更正您的代码,您需要对版本命令使用小写字母:cmake_minimum_required(VERSION 2.8) 因为它是一个命令。

有些命令有命名参数,有些没有。通常命名参数是大写的。在您的示例中,TARGETSVERSIONSHAREDDESTINATION 都是命名参数(CMake 调用关键字)。它们可以是任何大小写,但我们只是习惯于将它们设为大写。这些参数通过函数和宏的 cmake_parse_arguments 帮助进行了解析。由于所有命令都是用 C++ 实现的,因此参数解析是用 C++ 为它们完成的(可能使用相同的“命令”)。

除了命令名称外,局部变量的函数中可能会使用小写字母,但这尚未确定,您可以在野外找到任何类型的混合。

这是@ixSci 回答的一个插件。

CMake 的一些历史。

查看 2003 年的 this message,询问是否有计划允许小写命令。

No plans on changing this.

变化很大。查看 9 年前的 this commit,它将一堆现有代码从大写更改为小写。这是引述:

Ancient CMake versions required upper-case commands. Later command names became case-insensitive. Now the preferred style is lower-case.

现在,CMake 命令是 case-insensitive 并且仍然是 backwards-compatible。但是,CMake 变量保持 case-sensitive.

此外,CMake 2.6引入了cmake_policy,可以用来指定特定的语法版本。也许你怀旧了...