C++ 铿锵++-带有CMake的6.0无法识别std::string\u视图

C++ 铿锵++-带有CMake的6.0无法识别std::string\u视图,c++,cmake,gnu-make,C++,Cmake,Gnu Make,我正在Linux上使用Clang++6.0、CMake 3.11.4、Make 4.1。我使用自己的CMakeLists.txt从终端进行编译,它包含set(CMAKE\u CXX\u标准17)和 设置(上需要CMAKE\U CXX\U标准)。但是,我需要在我的项目中使用std::string\u view,由于某些原因,clang无法识别它。我也包括。我得到的错误是: 错误:命名空间“std”中没有名为“string\u view”的类型 此外,如果我尝试#包括,我会得到: 致命错误:“未找到

我正在Linux上使用Clang++6.0、CMake 3.11.4、Make 4.1。我使用自己的CMakeLists.txt从终端进行编译,它包含
set(CMAKE\u CXX\u标准17)

设置(上需要CMAKE\U CXX\U标准)
。但是,我需要在我的项目中使用
std::string\u view
,由于某些原因,clang无法识别它。我也包括
。我得到的错误是:

错误:命名空间“std”中没有名为“string\u view”的类型

此外,如果我尝试
#包括
,我会得到:

致命错误:“未找到字符串视图”文件


我到底错过了什么?好的,
string\u view
是C++17标准的一部分,而Clang支持C++17,因为Clang 4,我也在使用相对较新的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头保持了叮当声。

如果您的编译器抱怨,您可以用
std::string&

替换
std::string.

您是否验证了编译器版本和
-std
标志cmake通过例如
make VERBOSE=1
生成?如果是,您是否可以通过调用
clang++-std=c++17 dummy.cpp编译一个只包含
的虚拟翻译单元?您是否使用CMake而不是
set
目标编译功能(project PUBLIC cxx\u std\u 17)
?您确定CMake正在使用clang?Linux上的默认值通常是GCC。好的,所以我尝试在和1上运行带有verbose的make。是的,它确实使用叮当声,但是2。它使用-std=gnu++1z。您确定标准库支持C++17吗?也可以将clang与非c++17标准库一起使用