“cmake_minimum_required(VERSION 3.10)”中的 "VERSION" 是什么
What is the "VERSION" in "cmake_minimum_required(VERSION 3.10)”
我知道以下CMake语句的含义:
cmake_minimum_required(VERSION 3.10)
我只是想知道 VERSION
部分在语法上是什么 ?
是unquoted argument吗?如果它是一个参数,那么一定有一些其他的参数选择。
但是根据here,VERSION
似乎是cmake_minimum_required()
命令的唯一选择。
如果是这样,为什么我们还要明确地指定这个参数??
并且根据here,此命令设置变量CMAKE_MINIMUM_REQUIRED_VERSION。这里有某种字符串 concatenation 吗?所以我可以使用 set_minimum_required(XXX <some_value>)
将名称为 CMAKE_MINIMUM_REQUIRED_XXX
的任意变量发送到 ?
加 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".
所以好像是在争论
但是根据here对于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
来自here,对于cmake_minimum_required()
中的VERSION
:
The VERSION is a special keyword for this function. And the value of
the version follows the keyword.
所以这里叫keyword而不是option ...
加 4
Some feelings 关于 CMake...
我认为CMake命令的输入可以分为3种类型:
关键字参数(也称为option)
位置参数
可变参数(如 C 中的 ...
)
对于1,就像cmake_minimum_required
中的VERSION
一样,其值紧随其后。它被称为 关键字 或 option.
对于 2,此类参数具有正式名称,并在命令主体中通过该名称进行引用。
对于3,参数可以用ARGV
、ARGN
、ARGVC
、
引用
我在某处也看到了marker argument
。但我忘了在哪里。糟糕的语法...
加 1
好的,我找到了 marker argument
。它在 CMake 团队的书 Mastering CMake 中:
...而 CMake 官方文档说它是 option:
Search the paths specified by the PATHS option or in the short-hand
version of the command. These are typically hard-coded guesses.
多么混乱的措辞...
What is the "VERSION" in "cmake_minimum_required(VERSION 3.10)”
I am just wondering what the VERSION part is syntactically?
一个字符串。 VERSION
。没什么特别的。
Is it a unquoted argument?
是的。
why do we even need to specify this argument explicitly??
保持向前兼容性。这个想法是,也许在功能中会有 cmake_minimum_required(DATE 2021-11-03)
或类似的,例如。
Is there some kind of string concatenation here?
没有。 It is set explicitly.
So I can use set_minimum_required(XXX <some_value>) to sent an arbitrary variable with the name CMAKE_MINIMUM_REQUIRED_XXX to <some_value>?
没有
Some variables are required to be manipulated and some are optional.
CMake argument parsing 真的很粗糙很简单。它基本上是 shell 伪代码 if == "VERSION" then check_version() 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)
工作正常。
我知道以下CMake语句的含义:
cmake_minimum_required(VERSION 3.10)
我只是想知道 VERSION
部分在语法上是什么 ?
是unquoted argument吗?如果它是一个参数,那么一定有一些其他的参数选择。
但是根据here,VERSION
似乎是cmake_minimum_required()
命令的唯一选择。
如果是这样,为什么我们还要明确地指定这个参数??
并且根据here,此命令设置变量CMAKE_MINIMUM_REQUIRED_VERSION。这里有某种字符串 concatenation 吗?所以我可以使用 set_minimum_required(XXX <some_value>)
将名称为 CMAKE_MINIMUM_REQUIRED_XXX
的任意变量发送到
加 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".
所以好像是在争论
但是根据here对于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
来自here,对于cmake_minimum_required()
中的VERSION
:
The VERSION is a special keyword for this function. And the value of the version follows the keyword.
所以这里叫keyword而不是option ...
加 4
Some feelings 关于 CMake...
我认为CMake命令的输入可以分为3种类型:
关键字参数(也称为option)
位置参数
可变参数(如 C 中的
...
)
对于1,就像cmake_minimum_required
中的VERSION
一样,其值紧随其后。它被称为 关键字 或 option.
对于 2,此类参数具有正式名称,并在命令主体中通过该名称进行引用。
对于3,参数可以用ARGV
、ARGN
、ARGVC
、
我在某处也看到了marker argument
。但我忘了在哪里。糟糕的语法...
加 1
好的,我找到了 marker argument
。它在 CMake 团队的书 Mastering CMake 中:
...而 CMake 官方文档说它是 option:
Search the paths specified by the PATHS option or in the short-hand version of the command. These are typically hard-coded guesses.
多么混乱的措辞...
What is the "VERSION" in "cmake_minimum_required(VERSION 3.10)”
I am just wondering what the VERSION part is syntactically?
一个字符串。 VERSION
。没什么特别的。
Is it a unquoted argument?
是的。
why do we even need to specify this argument explicitly??
保持向前兼容性。这个想法是,也许在功能中会有 cmake_minimum_required(DATE 2021-11-03)
或类似的,例如。
Is there some kind of string concatenation here?
没有。 It is set explicitly.
So I can use set_minimum_required(XXX <some_value>) to sent an arbitrary variable with the name CMAKE_MINIMUM_REQUIRED_XXX to <some_value>?
没有
Some variables are required to be manipulated and some are optional.
CMake argument parsing 真的很粗糙很简单。它基本上是 shell 伪代码 if == "VERSION" then check_version() 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)
工作正常。