CMAKE_CXX_KNOWN_FEATURES

在版本 3.1 中添加。

此 CMake 版本已知的 C++ 功能列表。

此全局属性中列出的功能可能已知可用于 C++ 编译器。如果该功能可用于 C++ 编译器,它将列在 CMAKE_CXX_COMPILE_FEATURES 变量中。

此处列出的功能可与 target_compile_features() 命令一起使用。有关编译功能和支持编译器的列表,请参阅 cmake-compile-features(7) 手册。

此 CMake 版本已知的特征列在下面。

指示 C++ 标准支持的高级元特征

在版本 3.8 中添加。

以下元特征指示对相关语言标准的一般支持。它反映了编译器声明的语言支持,但不一定意味着完全符合该标准。

cxx_std_98

编译器模式至少为 C++ 98。

cxx_std_11

编译器模式至少为 C++ 11。

cxx_std_14

编译器模式至少为 C++ 14。

cxx_std_17

编译器模式至少为 C++ 17。

cxx_std_20

在版本 3.12 中添加。

编译器模式至少为 C++ 20。

cxx_std_23

在版本 3.20 中添加。

编译器模式至少为 C++ 23。

cxx_std_26

在版本 3.30 中添加。

编译器模式至少为 C++ 26。

注意

如果编译器的默认标准级别至少与请求的特征相同,CMake 可能会省略 -std= 标志。如果编译器的默认扩展模式与 <LANG>_EXTENSIONS 目标属性不匹配,或者如果 <LANG>_STANDARD 目标属性已设置,则该标志仍可能被添加。

低级单个编译特征

对于 C++ 11 和 C++ 14,编译器有时在实现某些语言特征方面速度很慢。CMake 提供了一些单独的编译特征来帮助项目确定是否可以使用特定特征。这些单独的特征现在不太相关,项目通常应优先使用高级元特征。C++ 17 或更高版本没有提供单独的编译特征。

有关使用单独编译特征的更多讨论,请参阅 cmake-compile-features(7) 手册。

C++ 98 中的单独特征

cxx_template_template_parameters

模板模板参数,如 ISO/IEC 14882:1998 中所定义。

C++ 11 中的单独特征

cxx_alias_templates

模板别名,如 N2258 中所定义。

cxx_alignas

对齐控制 alignas,如 N2341 中所定义。

cxx_alignof

对齐控制 alignof,如 N2341 中所定义。

cxx_attributes

泛型属性,如 N2761 中所定义。

cxx_auto_type

自动类型推断,如 N1984 中所定义。

cxx_constexpr

常量表达式,如 N2235 中所定义。

cxx_decltype_incomplete_return_types

不完全返回类型上的 Decltype,如 N3276 中所定义。

cxx_decltype

Decltype,如 N2343 中所定义。

cxx_default_function_template_args

函数模板的默认模板参数,如 DR226 中所定义。

cxx_defaulted_functions

默认函数,如 N2346 中所定义。

cxx_defaulted_move_initializers

默认移动初始化器,如 N3053 中所定义。

cxx_delegating_constructors

委托构造函数,如 N1986 中所定义。

cxx_deleted_functions

删除的函数,如 N2346 中所定义。

cxx_enum_forward_declarations

枚举前向声明,如 N2764 中所定义。

cxx_explicit_conversions

显式转换运算符,如 N2437 中所定义。

cxx_extended_friend_declarations

扩展的友元声明,如 N1791 中所定义。

cxx_extern_templates

外部模板,如 N1987 中所定义。

cxx_final

覆盖控制 final 关键字,如 N2928N3206N3272 中所定义。

cxx_func_identifier

预定义的 __func__ 标识符,如 N2340 中所定义。

cxx_generalized_initializers

初始化器列表,如 N2672 中所定义。

cxx_inheriting_constructors

继承构造函数,如 N2540 中所定义。

cxx_inline_namespaces

内联命名空间,如 N2535 中所定义。

cxx_lambdas

Lambda 函数,如 N2927 中所定义。

cxx_local_type_template_args

局部和未命名的类型作为模板参数,如 N2657 中所定义。

cxx_long_long_type

long long 类型,如 N1811 中所定义。

cxx_noexcept

异常规范,如 N3050 中所定义。

cxx_nonstatic_member_init

非静态数据成员初始化,如 N2756 中所定义。

cxx_nullptr

空指针,如 N2431 中所定义。

cxx_override

覆盖控制 override 关键字,如 N2928N3206N3272 中所定义。

cxx_range_for

基于范围的 for,如 N2930 中所定义。

cxx_raw_string_literals

原始字符串文字,如 N2442 中所定义。

cxx_reference_qualified_functions

引用限定的函数,如 N2439 中所定义。

cxx_right_angle_brackets

右尖括号解析,如 N1757 中所定义。

cxx_rvalue_references

右值引用,如 N2118 中所定义。

cxx_sizeof_member

非静态数据成员的大小,如 N2253 中所定义。

cxx_static_assert

静态断言,如 N1720 中所定义。

cxx_strong_enums

强类型枚举,如 N2347 中所定义。

cxx_thread_local

线程局部变量,如 N2659 中所定义。

cxx_trailing_return_types

自动函数返回类型,如 N2541 中所定义。

cxx_unicode_literals

Unicode 字符串文字,如 N2442 中所定义。

cxx_uniform_initialization

统一初始化,如 N2640 中所定义。

cxx_unrestricted_unions

不受限制的联合,如 N2544 中所定义。

cxx_user_literals

用户定义的文字,如 N2765 中所定义。

cxx_variadic_macros

可变参数宏,如 N1653 中所定义。

cxx_variadic_templates

可变参数模板,如 N2242 中所定义。

C++ 14 中的单个功能

cxx_aggregate_default_initializers

聚合默认初始化器,如 N3605 中所定义。

cxx_attribute_deprecated

[[deprecated]] 属性,如 N3760 中所定义。

cxx_binary_literals

二进制文字,如 N3472 中所定义。

cxx_contextual_conversions

上下文转换,如 N3323 中所定义。

cxx_decltype_auto

decltype(auto) 语义,如 N3638 中所定义。

cxx_digit_separators

数字分隔符,如 N3781 中所定义。

cxx_generic_lambdas

泛型 lambda,如 N3649 中所定义。

cxx_lambda_init_captures

初始化的 lambda 捕获,如 N3648 中所定义。

cxx_relaxed_constexpr

放松的 constexpr,如 N3652 中所定义。

cxx_return_type_deduction

普通函数的返回类型推断,如 N3386 中所定义。

cxx_variable_templates

变量模板,如 N3651 中所定义。