[英]CMake set project to C++ 20
我正在尝试将 C++ 标准从版本 17 更改为 20,以便我可以使用 jthread 库。
在我添加的项目的根 CMakelists.txt 上:
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED YES)
但是当我再次构建项目并查看程序运行的版本时,它仍然是 C++ 17 版本而不是 C++ 20。
我检查运行以下行的版本:
if (__cplusplus == 201703L)
std::cout << "C++17\n";
else if (__cplusplus == 201402L)
std::cout << "C++14\n";
else if (__cplusplus == 201103L)
std::cout << "C++11\n";
else if (__cplusplus == 199711L)
std::cout << "C++98\n";
else if (__cplusplus == 202002L)
std::cout << "C++20\n";
else
std::cout << "pre-standard C++\n";
我正在使用 g++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0,从我读到的它支持 c++ 20, g++_C++20
有谁知道为什么会这样?
__cplusplus
报告标准的版本,但其定义并不完全清楚。 GCC 似乎只将其从 GCC 11 定义为202002
,当时大概实现达到了某个任意的完成水平。
最好使用功能测试宏来测试您要使用的特定功能是否存在,例如检查std::jthread
支持:
#include <thread>
#ifndef __cpp_lib_jthread
#error this code requires std::jthread
#endif
请注意, std::jthread
仅适用于 libstdc++ 10: https://godbolt.org/z/eqP4j4eq1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.