Clang ++ - 6.0 с CMake не распознает std :: string_view - PullRequest
0 голосов
/ 06 июля 2018

Я использую Clang ++ 6.0, CMake 3.11.4, Make 4.1 на Linux. Я компилирую из терминала, используя мой собственный 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 поддерживает C ++ 17 начиная с Clang 4, также я использую относительно новые Make и CMake.

Ответы [ 3 ]

0 голосов
/ 14 июля 2018

В конце концов, я исправил проблему, установив gcc-8, и сохранил лязг, используя заголовки GNU.

0 голосов
/ 19 апреля 2019

Если вы подаете жалобу на компиляцию, вы можете заменить std::string_view на std::string&

0 голосов
/ 08 июля 2018

Более современный способ выполнения этого требования:

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
...