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

时间:2018-07-06 12:30:06

标签: c++ cmake gnu-make

我在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 4起,Clang就支持C ++ 17。我还使用了相对较新的Make和CMake。

3 个答案:

答案 0 :(得分:0)

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

target_compile_features(myTarget PRIVATE cxx_std_17)

这对编译器的功能提供了更好的支持,如果存在兼容性问题,您更有可能得到cmake报告问题。

您确实需要确认正在使用哪个版本的clang。您说您有clang6。但是您得到-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

答案 1 :(得分:0)

最后,我通过安装gcc-8解决了该问题,并使用GNU标头保留了clang。

答案 2 :(得分:0)

如果您有投诉,可以将 std::string_view 替换为 std::string&