You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake如何确定默认C++标准?CMAKE_CXX_STANDARD默认不存在疑问

CMAKE_CXX_STANDARD 未指定时的默认C++标准判定逻辑

你猜测的结论是对的:未显式设置CMAKE_CXX_STANDARD时,该变量不会被CMake自动定义,所以直接用message打印会得到空值。

CMake确定默认C++标准的逻辑主要分为以下几种情况:

  • 关联CMake版本:不同版本的CMake自带不同的默认标准,比如CMake 3.1及更早版本默认采用C98;CMake 3.2至3.14版本默认是C11;CMake 3.15及之后版本默认切换为C++17。
  • 结合编译器默认行为:创建可执行文件或库目标时,CMake会适配所用编译器的原生默认标准。比如部分编译器默认启用更高版本的C++标准,CMake会遵循这个行为,前提是没有显式指定标准。
  • 受CMAKE_CXX_EXTENSIONS变量影响:当该变量设为默认值ON时,CMake会启用编译器扩展特性,此时默认标准与编译器原生默认一致;若设为OFF,CMake会进入严格标准模式,默认标准则以当前CMake版本的设定为准。

额外补充:如果想在未显式设置CMAKE_CXX_STANDARD时,获取目标实际生效的C++标准,可以通过查询目标属性CXX_STANDARD实现,示例代码如下:

add_executable(my_target main.cpp)
get_target_property(USED_STANDARD my_target CXX_STANDARD)
message("实际使用的C++标准: ${USED_STANDARD}")

内容的提问来源于stack exchange,提问作者user2138149

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:03:30