CXX_STANDARD

在 3.1 版本中添加。

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

此属性指定构建此目标所请求的 C++ 标准。对于某些编译器,这会导致向编译行添加诸如 -std=gnu++11 之类的标志。对于没有标准级别概念的编译器(例如 2015 Update 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 版本中添加。

C++26。 CMake 3.25 及更高版本识别 26 为有效值,但任何版本都不支持任何编译器。

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

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 变量,则此属性由该变量的值初始化。