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_203.12 版本新增。
编译器模式至少为 C++ 20。
cxx_std_23在 3.20 版本中添加。
编译器模式至少为 C++ 23。
cxx_std_263.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_decltypeDecltype,如 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_finalcxx_func_identifier预定义
__func__标识符,如 N2340 中定义。cxx_generalized_initializers初始化列表,如 N2672 中定义。
cxx_inheriting_constructors继承构造函数,如 N2540 中定义。
cxx_inline_namespaces内联命名空间,如 N2535 中定义。
cxx_lambdasLambda 函数,如 N2927 中定义。
cxx_local_type_template_args作为模板参数的局部和匿名类型,如 N2657 中定义。
cxx_long_long_typelong long类型,如 N1811 中定义。cxx_noexcept异常规范,如 N3050 中定义。
cxx_nonstatic_member_init非静态数据成员初始化,如 N2756 中定义。
cxx_nullptr空指针,如 N2431 中定义。
cxx_overridecxx_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_literalsUnicode 字符串字面量,如 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_autodecltype(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 中定义。