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

CMAKE_CXX_STANDARD前置设置失效,VS2019默认C++14问题求助

CMake配置C++17在VS2019不生效的原因及解决方法

我碰到过不少开发者遇到这个问题——明明设置了CMAKE_CXX_STANDARD相关变量,VS2019却还是默认用C++14,反而直接把/std:c++17加到CMAKE_CXX_FLAGS里就管用。其实核心问题完全出在配置顺序上。

你之前的错误配置顺序

你应该是先设置了C++标准,再声明project:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
project(TradingEngine CXX)

为什么这会失效?因为project()命令执行时,会根据当前编译器环境(这里是VS2019)初始化一系列默认编译设置,包括C++标准版本。这时候你提前设置的CMAKE_CXX_STANDARD会被这个初始化过程覆盖,相当于白配置了。

正确的配置顺序

必须先调用project(),再设置C++标准相关变量:

project(TradingEngine CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

这样设置的原因是,project()完成初始化后,后续设置的CMAKE_CXX_STANDARD会覆盖默认值,CMake会正确将这个标准传递给VS2019的编译器配置,生成的工程就会默认使用C++17了。

另外补充一句:直接修改CMAKE_CXX_FLAGS虽然能生效,但这种方式不够跨平台——比如换到GCC或Clang环境,你又得改成-std=c++17,而用CMAKE_CXX_STANDARD的方式是CMake帮你处理不同编译器的差异,显然是更优雅、更通用的做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:23:15