CMake 版本设置:我是否应该使用 CMAKE_CXX_STANDARD 或 `CXX_STANDARD` 在我的项目根目录 `CMakeLists.txt` 文件中设置 `C++` 版本?
CMake Version setting: Am I suppose to set the `C++` version in my project-root `CMakeLists.txt` file using CMAKE_CXX_STANDARD, or `CXX_STANDARD`?
这可能是个愚蠢的问题。如果它是重复的,我找不到它。
我是 CMake 的新手,我第一次接触它是通过 JetBrains IDE: CLion。我搬到了 VSCode,因为我觉得在任何其他环境中都不像 VSCode 那样舒适或配备齐全。不幸的是,在真正的 IDE 中构建项目通常更容易,尤其是在 VS2022 中。在 VSCode 中,我必须自己配置大部分内容,但实际上,我通过这种方式学到了更多,所以我不介意。所以我通常通过 project-root: CMakeLists.txt
[=62 设置我使用的 C++ 版本=].刚才我去开始一个新项目时,虽然我注意到 Intellisense/Intellicode 弹出了一些东西,但我可以选择两个选项:
CMAKE_CXX_STANDARD <ver>
CXX_STANDARD <ver>
我已经使用 CMAKE_CXX_STANDARD 17
大约一年半了,从未见过没有前缀 "CMAKE_" 的设置版本.当我 google 它时,我只找到 CMAKE_CXX_STANDARD 设置的结果,考虑到语法几乎相同,这并不奇怪。
此外,我都试过了,我没有注意到有什么不同,但是当我不添加配置时,我并没有真正注意到有什么不同。我只是想知道有什么区别,如果有的话,所以我知道要使用哪个,更重要的是为什么要使用它。
下面的 img 显示了 V.S 中 C_CPP Microsoft IntelliSense
扩展的建议。代码.
注意:
行:set(CXX_STANDARD)
格式错误,它应该看起来像这样:
set(CXX_STANDARD 17)
您可以使用 CMAKE_CXX_STANDARD
和 CXX_STANDARD
中的任何一个,但请注意它们是 不同的实体:
CMAKE_CXX_STANDARD是一个变量,所以可以用set
命令设置:
set(CXX_STANDARD_REQUIRED 17)
此设置会影响所有 executable/library 个目标在之后创建。
CXX_STANDARD是一个目标属性,所以可以用set_property
或[=17=设置] 命令:
set_property(TARGET my_target PROPERTY CXX_STANDARD 17)
此设置应在创建目标后执行my_target
并且仅影响给定的目标。
尝试将 属性 设置为变量:
set(CXX_STANDARD 17)
只是错误:它设置了一个变量 CXX_STANDARD
,而这个变量从未使用过 由 CMake。
这可能是个愚蠢的问题。如果它是重复的,我找不到它。
我是 CMake 的新手,我第一次接触它是通过 JetBrains IDE: CLion。我搬到了 VSCode,因为我觉得在任何其他环境中都不像 VSCode 那样舒适或配备齐全。不幸的是,在真正的 IDE 中构建项目通常更容易,尤其是在 VS2022 中。在 VSCode 中,我必须自己配置大部分内容,但实际上,我通过这种方式学到了更多,所以我不介意。所以我通常通过 project-root: CMakeLists.txt
[=62 设置我使用的 C++ 版本=].刚才我去开始一个新项目时,虽然我注意到 Intellisense/Intellicode 弹出了一些东西,但我可以选择两个选项:
CMAKE_CXX_STANDARD <ver>
CXX_STANDARD <ver>
我已经使用 CMAKE_CXX_STANDARD 17
大约一年半了,从未见过没有前缀 "CMAKE_" 的设置版本.当我 google 它时,我只找到 CMAKE_CXX_STANDARD 设置的结果,考虑到语法几乎相同,这并不奇怪。
此外,我都试过了,我没有注意到有什么不同,但是当我不添加配置时,我并没有真正注意到有什么不同。我只是想知道有什么区别,如果有的话,所以我知道要使用哪个,更重要的是为什么要使用它。
下面的 img 显示了 V.S 中 C_CPP Microsoft IntelliSense
扩展的建议。代码.
注意:
行:set(CXX_STANDARD)
格式错误,它应该看起来像这样:
set(CXX_STANDARD 17)
您可以使用 CMAKE_CXX_STANDARD
和 CXX_STANDARD
中的任何一个,但请注意它们是 不同的实体:
CMAKE_CXX_STANDARD是一个变量,所以可以用
set
命令设置:set(CXX_STANDARD_REQUIRED 17)
此设置会影响所有 executable/library 个目标在之后创建。
CXX_STANDARD是一个目标属性,所以可以用
set_property
或[=17=设置] 命令:set_property(TARGET my_target PROPERTY CXX_STANDARD 17)
此设置应在创建目标后执行
my_target
并且仅影响给定的目标。
尝试将 属性 设置为变量:
set(CXX_STANDARD 17)
只是错误:它设置了一个变量 CXX_STANDARD
,而这个变量从未使用过 由 CMake。