Насколько я знаю, лучший способ изменить целевой компилятор C ++, используемый cmake, — это изменить CXX
переменная окружения непосредственно перед вызовом cmake:
$ export CXX="clang++" && cmake --build
Сборка Travis CI устанавливает CXX
а также CC
соответственно настройкам билда. Так что, если у вас есть это в вашем .travis.yml
:
language: cpp
compiler:
- gcc
- clang
script:
- cmake --build
- ./bin/foo
Первый раз cmake
следует использовать GCC и Clang на последнем нет?
Вместо этого сборка GCC прекрасно компилируется (это компилятор по умолчанию, используемый cmake), но версия Clang также использует GCC:
0.01s $ echo $ CC $ CXX
лязг лязг ++
Команда «echo $ CC $ CXX» завершена с 0.0.02s $ $ CXX — версия
Clang версия 3.4 (tags / RELEASE_34 / final) Цель: x86_64-unknown-linux-gnu Модель потока: posixЗапуск: cmake -G «Makefiles Unix» -Wno-dev ../cmake
— Идентификатор компилятора C — это GNU
— Идентификатор компилятора CXX — GNU
— Проверьте работающий компилятор C: / usr / bin / gcc
— Проверьте работающий компилятор C: / usr / bin / gcc — работает
— Обнаружение C-компилятора ABI info
— Обнаружение информации ABI компилятора C — выполнено
— Проверьте работающий компилятор CXX: / usr / bin / c ++
— Проверьте работающий компилятор CXX: / usr / bin / c ++ — работает
— Обнаружение CXX компилятора ABI info
— Обнаружение информации ABI CXX компилятора — сделано
Я даже попытался установить эти переменные снова перед вызовом:
- if [ "$CXX" == "clang++" ]; then export CXX="clang++" && cmake --build; fi
- if [ "$CXX" == "g++" ]; then export CXX="g++" && cmake --build; fi
Что не имеет особого смысла, я думаю …
Вот это успешная сборка с использованием GCC, и Вот (Предполагается, что) лязг построить.
Мой вопрос: Как я могу изменить компилятор, используемый cmake под Travis CI?
Вот мой .travis.yml.
В вашем .travis.yml
мы видим:
- if [ "$CXX" == "clang++" ]; then export CXX="clang++" && bii cpp:build; fi
- if [ "$CXX" == "g++" ]; then export CXX="g++" && bii cpp:build; fi
biicode
команда bii cpp:build
запускает CMake с biicode
генератор по умолчанию, который "Unix Makefiles"
для платформы UNIX (набор инструментов GNU). Читайте об этом: Документация по Biicode C ++ — Генераторы и IDE.
Такое поведение видно в ваших журналах: Running: cmake -G "Unix Makefiles" -Wno-dev ../cmake
(https://travis-ci.org/Manu343726/Turbo/jobs/33889114, строка 257)
CMake не всегда ищет переменные окружения CXX/CC
(как указано в CMake FAQ). Это зависит от выбранного генератора. Это работает для меня, когда я вызываю CMake без генератора (мой файл travis: https://github.com/quepas/Graph-ene/blob/master/.travis.yml).
cmake -D
формат описан в способе 2 (CMake FAQ — Как мне использовать другой компилятор?)biicode
использовать правильный генератор CMake (Конфигурация Biicode C ++) или использовать biicode
пользовательский набор инструментов (Biicode — Использование пользовательских инструментов)Вы можете использовать матрицу. Это особенно полезно, если у вас много разных компиляторов (например, gcc5, gcc6, clang3.7, clang3.8):
language: generic # Works better in most cases
matrix:
include:
- env: CXX=g++ CC=gcc
# additional apt settings if needed
- env: CXX=clang++ CC=clang
script:
- ...
Если у вас есть разные версии компилятора, это может быть расширено:
[…]
matrix:
include:
- env: CXX=g++-5 CC=gcc-5
- env: CXX=g++-6 CC=gcc-6
- env: CXX=clang++-3.8 CC=clang-3.8
[…]
Он также не дублирует шаги скрипта и сохраняет файл в чистоте если еще… частей.