我在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