CXX_STANDARD

版本 3.1 中新增。

请求构建此目标所使用的 C++ 标准。

此属性指定请求构建此目标所使用的 C++ 标准。对于某些编译器,这会在编译行中添加诸如 -std=gnu++11 这样的标志。对于不具有标准级别概念的编译器(例如 2015 年更新 3 之前的 Microsoft Visual C++),此设置无效。

支持的值包括

98

C++98

11

C++11

14

C++14

17

版本 3.8 新增。

C++17

20

3.12 版本新增。

C++20

23

在 3.20 版本中添加。

C++23

26

在 3.25 版本中新增。

如果请求的值未导致为使用的编译器添加编译标志,则会改为添加先前的标准标志。这意味着使用

set_property(TARGET tgt PROPERTY CXX_STANDARD 11)

如果使用的编译器不支持 -std=gnu++11 或等效标志,则不会导致错误或警告,而是会添加 -std=gnu++98 标志(如果支持)。这种“降级”行为可以通过 CXX_STANDARD_REQUIRED 目标属性进行控制。此外,CXX_EXTENSIONS 目标属性可用于按目标控制是否启用特定于编译器的扩展。

有关编译功能和支持的编译器列表,请参阅 cmake-compile-features(7) 手册。

创建目标时,此属性会根据 CMAKE_CXX_STANDARD 变量的值进行初始化(如果该变量已设置)。