1. cmake设置C++标准
cmake有如下一些方式设置C++标准:
1.1 CMAKE_CXX_FLAGS 方式:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
1.2 CXX_STANDARD 方式:
设置单个目标的C++标准
add_executable(myapp main.cpp)
set_property(TARGET myapp PROPERTY CXX_STANDARD 17)
set_property(TARGET myapp PROPERTY CXX_STANDARD_REQUIRED ON)
设置全局的C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
其他未经测试的方式暂不列出,后续测试完成之后再更新
2. 代码判断C++标准
代码可如下判断编译器支持的是哪个标准
2.1 对于GCC和Clang
对于GCC和Clang,使用 __cplusplus 宏来判断
#if __cplusplus >= 201703L
std::cout << "Compiler supports C++17 or later." << std::endl;
#else
std::cout << "Compiler does not support C++17 or later." << std::endl;
#endif
#if __cplusplus >= 201402L
std::cout << "Compiler supports C++14 or later." << std::endl;
#else
std::cout << "Compiler does not support C++14 or later." << std::endl;
#endif
#if __cplusplus >= 201103L
std::cout << "Compiler supports C++11 or later." << std::endl;
#else
std::cout << "Compiler does not support C++11 or later." << std::endl;
#endif
2.2 对于Visual Studio
对于Visual Studio,使用 _MSVC_LANG 宏来判断
#if _MSVC_LANG >= 201703L
std::cout << "Compiler supports C++17 or later." << std::endl;
#else
std::cout << "Compiler does not support C++17 or later." << std::endl;
#endif
#if _MSVC_LANG >= 201402L
std::cout << "Compiler supports C++14 or later." << std::endl;
#else
std::cout << "Compiler does not support C++14 or later." << std::endl;
#endif
#if _MSVC_LANG >= 201103L
std::cout << "Compiler supports C++11 or later." << std::endl;
#else
std::cout << "Compiler does not support C++11 or later." << std::endl;
#endif
在vs编译器中测试时发现,vs似乎始终按照自己支持的最高标准来执行,不支持调节








网友评论