-1

我知道以下 CMake 语句的含义:

cmake_minimum_required(VERSION 3.10)

我只是想知道这VERSION部分在语法上是什么?

这是一个未引用的论点吗?如果参数,则必须有一些其他参数选择。

但是根据here,这似乎VERSION是该cmake_minimum_required()命令的唯一选择。

如果是这样,为什么我们甚至需要明确指定这个参数?

根据此处,此命令设置变量 CMAKE_MINIMUM_REQUIRED_VERSION 这里有某种字符串连接吗?所以我可以set_minimum_required(XXX <some_value>)用来发送一个名为CMAKE_MINIMUM_REQUIRED_XXX<some_value> 的任意变量?

加 1

我刚刚尝试在以下语句中使用CMakeLists.txt

cmake_minimum_required(XXX 123)

并且 cmake 抱怨说:

CMake Error at CMakeLists.txt:2 (cmake_minimum_required):
  cmake_minimum_required called with unknown argument "XXX".

所以这似乎是一个争论。

但是根据这里project()命令,一个类似的VERSION字符串被指定为一个选项。好像有点不协调。

添加 2

我刚刚尝试在以下语句中使用CMakeLists.txt

cmake_minimum_required(3.10)

并且 cmake 抱怨说:

CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  cmake_minimum_required called with unknown argument "3.10".

因此,CMake 似乎依赖于VERSION正确解释“3.10”参数的部分。所以我想这VERSION也是一个选择。

既然有另一种可能的选择FATAL_ERROR,就有必要有一个VERSION选择。

所以总结一下我目前的理解:

CMake 语言的基本范式是:

CMake 命令只是根据参数和选项操作变量。

有些变量是需要操作的,有些是可选的。

  • 对于必需的,它们的值通过参数指定。(有点像位置论点)

  • 对于可选的,它们的值是通过相应选项后面的参数指定的。(有点像命名参数)

添加 3

这里开始,对于VERSIONin cmake_minimum_required()

VERSION 是此函数的特殊关键字。版本的值跟在关键字后面。

所以在这里它被称为关键字而不是选项......

添加 4

关于 CMake 的一些感受...

4

2 回答 2

1

“cmake_minimum_required(VERSION 3.10)”中的“VERSION”是什么</p>

我只是想知道 VERSION 部分在语法上是什么?

一个字符串。VERSION. 没什么特别的。

这是一个未引用的论点吗?

是的。

为什么我们甚至需要明确指定这个参数?

保持前向兼容性。这个想法是,例如,也许在功能中会有cmake_minimum_required(DATE 2021-11-03)或类似的。

这里有某种字符串连接吗?

,它是明确设置的

所以我可以使用 set_minimum_required(XXX <some_value>) 将名为 CMAKE_MINIMUM_REQUIRED_XXX 的任意变量发送到 <some_value>?

不。

有些变量是需要操作的,有些是可选的。

CMake参数解析非常简单粗暴。它基本上是在 shell 伪代码if $1 == "VERSION" then check_version($2) else error中。您如何称呼这些字符串实际上取决于您的解释,这取决于上下文,在上下文中cmake_minimum_required,肯定VERSION是“关键字”。或“特殊要求的论点”。或类似的。

所有函数参数都是字符串,函数将它们与其他字符串进行比较并在此基础上执行逻辑。没有其他变量类型。列表是字符串,列表元素由;字符串中的字符分隔。

cmake_minimum_required 的实现在这里:https://gitlab.kitware.com/cmake/cmake/-/blob/master/Source/cmCMakeMinimumRequired.cxx#L29。有趣的是,看起来解析是在一个循环中,所以做得cmake_minimum_required(VERSION VERSION VERSION VERSION 3.11)很好。

于 2021-11-03T08:20:13.000 回答
0

我认为 CMake 命令的输入可以分为 3 种类型:

  1. 关键字参数(也称为option

  2. 位置论据

  3. 可变参数(如...在 C 中)

对于 1,与VERSIONin一样cmake_minimum_required,其值紧随其后。它被称为关键字选项

对于 2,此类参数具有正式名称,并在命令正文中通过该名称引用。

对于 3,参数可以用ARGV, ARGN,来引用ARGVC

我也在marker argument某处看到。但我忘记了在哪里。可怕的语法...

加 1

好的,我找到了marker argument. 它在CMake 团队的Mastering CMake一书中:

在此处输入图像描述 在此处输入图像描述

...而 CMake 官方文档说这是一个选项

好乱的说法……

于 2021-11-03T08:12:28.853 回答