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
相关产品推荐
相关产品推荐

