如何在cmake项目中使用c++20

Tak*_*oni 12 c++ format cmake c++20

我想使用 c++20 中可用的头文件。

我正在使用最新版本的 cmake。

我的 CMakeFiles 看起来像

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_BUILD_TYPE debug)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20")
Run Code Online (Sandbox Code Playgroud)

我使用 clang 9 作为我的编译器。

但是,在包含以下内容时出现以下错误:

fatal error: 'format' file not found
#include <format>
Run Code Online (Sandbox Code Playgroud)

我也使用了标志-std=c++2a,但没有效果。简而言之,我觉得我在这里错过了一些重要的东西。我对 cmake 有点陌生,有什么帮助吗?

L. *_* F. 9

根据cppreference 上的C++ 编译器支持页面(存档),目前没有主流编译器支持 C++20<format>功能。

在此处输入图片说明

因此,您目前无法使用#include <format>. 现在考虑使用{fmt}库,它是 C++20<format>库的基础。它以高安全性和高效率而闻名。

  • 我想知道为什么会这样。实现`&lt;format&gt;`有那么难吗?大多数编译器似乎已经支持更复杂的部分,例如“概念”。 (2认同)
  • @Ayxan Concepts 最初是一个 TS;许多编译器几年前就已经开始研究它了。然而,“&lt;format&gt;”主要只是 fmt 库的标准化。 (2认同)