Изменить компилятор 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).

решений


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