带有 CMake 的 Clang++-6.0 无法识别 std::string_view



我在Linux上使用Clang++ 6.0,CMake 3.11.4,Make 4.1。我正在使用我自己的CMakeLists.txt从终端进行编译,其中包含set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON)。但是,我需要在我的项目中使用std::string_view,并且由于某种原因,clang 无法识别它。我也包括<string>。我得到的错误是:

error: no type named 'string_view' in namespace 'std'

另外,如果我尝试#include <string_view>,我会得到:

fatal error: 'string_view' file not found

我到底错过了什么?AFAIK,string_view是 C++17 标准的一部分,Clang 自 Clang 4 以来支持 C++17,我也使用相对较新的 Make 和 CMake。

强制执行此要求的更现代方法是:

target_compile_features(myTarget PRIVATE cxx_std_17)

这对编译器的功能有更好的支持,如果存在兼容性问题,你更有可能让 cmake 报告问题。

您确实需要确认使用的是哪个版本的 clang。你说你有叮当 6.但是你得到了-std=gnu++1z这是一个强烈的迹象,表明cmake正在使用旧版本。

您可以通过多种方式设置编译器,以下是使用环境:

$ export CC=/usr/bin/clang
$ export CXX=/usr/bin/clang++
$ cmake ..
-- The C compiler identification is Clang
-- The CXX compiler identification is Clang

最后,我通过安装 gcc-8 解决了这个问题,并且我一直使用 GNU 标头进行 clang。

如果你的编译有问题,你可以用std::string&替换std::string_view

最新更新