【发布时间】:2018-01-23 02:51:10
【问题描述】:
我使用的是支持集成 CMake 3.8 的 VS 15.3。如何在不为每个特定编译器编写标志的情况下以 C++17 为目标?我当前的全局设置不起作用:
# https://cmake.org/cmake/help/latest/prop_tgt/CXX_STANDARD.html
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# expected behaviour
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++lastest")
我希望 CMake 在生成 VS 解决方案文件时添加“/std:c++lastest”或等效项,但没有找到 c++17 标志,导致编译器错误:
C1189 #error: class template optional is only available with C++17.
【问题讨论】:
-
CMake 通常不会消除为每个特定编译器编写标志的需要。
-
“VS 15.3”是指 Visual Studio 2017 预览版 3 吗?或者你的意思是 Visual Studio 2015 更新 3(它不支持太多,如果有的话,C++17)?
-
@Someprogrammerdude 我正在使用
std::optional功能,如果我手动将"/std:c++lastest"标志添加到CMakeLists,就可以使用。 -
您需要将标志传递给编译器。接受 C++17 的是 编译器,而不是
cmake -
是最新的,不是最新的
标签: c++ visual-studio cmake c++17