繁体   English   中英

CMake 设置项目为 C++ 20

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM