Изменить компилятор 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 и лязгать на последнем нет?
вместо этого сборка GCC компилируется просто отлично (по умолчанию компилятор, используемый cmake), но версия Clang также использует GCC:
0.01 s$ echo $CC $CXX
clang clang++
Команда "echo $CC $CXX" вышла с 0.0.02 s$ $CXX --version
clang версии 3.4 (теги/RELEASE_34/final) цель: x86_64-неизвестно-linux-gnu модель потока: posixзапуск: cmake-G "Unix Makefiles" -Wno-dev ..х
-- Идентификация компилятора C-GNU
-- В СХХ идентификация компилятора-GNU
-- Проверьте работает компилятор C: /usr/Бен/ССЗ
-- Проверьте работу компилятора C: / usr/bin / gcc -- works
-- Обнаружение компилятора C ABI info
-- Обнаружение компилятора C ABI info-done
-- Проверьте работу компилятора CXX:/usr/bin / c++
-- Проверка работы компилятора CXX: / usr/bin / c++ -- works
-- Обнаружение компилятора CXX ABI info
-- Обнаружение компилятора CXX ABI информация-сделано
Я даже попытался установить эти переменные снова непосредственно перед вызовом:
- if [ "$CXX" == "clang++" ]; then export CXX="clang++" && cmake --build; fi
- if [ "$CXX" == "g++" ]; then export CXX="g++" && cmake --build; fi
, который не имеет смысла я думаю...
здесь является успешной сборкой с использованием GCC и здесь (предположительно) Clang build.
мой вопрос: как я могу изменить компилятор, используемый cmake под Travis CI?
здесь мой .Трэвис.в формате YML.
2 ответов
объяснение
в своем .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
'команда s bii cpp:build
запускает CMake с biicode
генератор по умолчанию, который является "Unix Makefiles"
для платформы UNIX (GNU toolchain). Читайте об этом: biicode c++ документация-генераторы и IDEs.
это поведение видно в ваших журналах:Running: cmake -G "Unix Makefiles" -Wno-dev ../cmake
(https://travis-ci.org/Manu343726/Turbo/jobs/33889114, строка 257)
CMake не всегда ищет переменные среды CXX/CC
(как указано в CMake, например, справку). Это зависит от выбранного генератора. Он работает для меня, когда я вызываю CMake без генератора (мой файл travis:https://github.com/quepas/Graph-ene/blob/master/.travis.yml).
решений
- используйте CMake только с
cmake -D
формат, описанный в методе 2 (CMake FAQ-Как использовать другой компилятор?) - настройка
biicode
использование CMake, например, по генератор (Конфигурация Biicode C++) или используйтеbiicode
'ы пользовательских инструментов (Biicode-использование пользовательских toolchain)
Вы можете использовать матрицы. Это особенно полезно, если у вас много разных компиляторов (например. 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
[…]
Он также не дублирует шаги сценария и сохраняет файл в чистоте если... то... запасные части.