Я пытаюсь настроить конвейер CI для использования с C ++.Имеющиеся у меня Docker-контейнеры не поддерживают C ++ 17, поэтому я хотел скачать релиз со страницы LLVM и правильно его настроить.Затем я извлекаю это под /opt/clang7
.Я также использую файл CMake toolchain, чтобы он брал включения, библиотеки и т.д. из этого дистрибутива Clang.Вот мой файл набора инструментов clang7-ci.cmake
:
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_C_COMPILER /opt/clang7/bin/clang)
SET(CMAKE_CXX_COMPILER /opt/clang7/bin/clang++)
SET(CMAKE_FIND_ROOT_PATH /opt/clang7)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
Я называю конфигурацию CMake cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/clang7-ci.cmake ..
, и она, похоже, подбирает правильный набор clang и clang ++ из набора инструментов.Как я вижу их в выходных данных конфигурации CMake:
- Идентификатор компилятора C - Clang 7.0.1
- Идентификатор компилятора CXX - Clang 7.0.1
- Проверить работающий компилятор C: / opt / clang7 / bin / clang
- Проверить работающий компилятор C: / opt / clang7 / bin / clang - работает
Итак, я предполагаю, что он правильно использует каталог toolchain, иначе как бы он нашел мой установленный компилятор C ++ как clang ++.Тем не менее, это дает мне следующую ошибку, когда я пытаюсь построить с cmake --build .
:
В файле, включенном в /builds/meguli/chops/tests/answer_life/answer_life.cpp:2: /builds / meguli / chops / tests / answer_life /../ catch.hpp: 644: 10: ошибка: нет шаблона с именем 'is_same_v' в пространстве имен 'std';Вы имели в виду «is_same»?
(!std::is_same_v<T, Rest> && ...) && is_unique<Rest...>
~~~~~^
/ usr / lib / gcc / x86_64-linux-gnu / 6.3.0 /../../../../ include / c ++ / 6.3.0 / type_traits: 1517: 12: примечание: здесь объявлено «is_same» struct is_same ^
Как вы можете видеть, он ищет в каталоге хоста /usr/lib/.../inclue/6.3.0
для включаемых файлов.Это не то, что я хотел, я хочу построить для C ++ 17, и я хочу, чтобы он включал заголовки из дистрибутива Clang.Я установил SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
, чтобы он искал в цепочке инструментов каталоги включений, но он не работает.Как мне сделать поиск только под /opt/clang7
?