cmake设置C++标准与代码判断C++标准

2024-05-05  本文已影响0人  book_02

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似乎始终按照自己支持的最高标准来执行,不支持调节

上一篇 下一篇

猜你喜欢

热点阅读