我在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。
答案 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&