Изменить компилятор C ++ для cmake под TravisCI

Насколько я знаю, лучший способ изменить целевой компилятор 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.

8

Решение

объяснение

В вашем .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).

Решения

11

Другие решения

Вы можете использовать матрицу. Это особенно полезно, если у вас много разных компиляторов (например, 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
[…]

Он также не дублирует шаги скрипта и сохраняет файл в чистоте если еще… частей.

https://travis-ci.org/RhysU/descendu/builds/158055261

0