昔Travis CIでC++11のコードをビルドしたとき(参考:Travis CI にて、C++11のソースをgccとclangの両方でビルドする - minus9d's diary)やたら大変だったのですが、いつのまにかUbuntuのバージョンが14.04に上がったらしく、前よりは簡単にできるようになりました。
以下では、g++とclang++の両方でC++11またはC++14のコードをビルドする例について示します。
C++11の場合
デフォルトでgcc 4.8.4 と clang 5.0.0が使えるので、特に工夫しなくてもC++11が使えます。
以下のMakefileと
CXX = g++ CXXFLAGS = -W -Wall -std=c++11 TARGET = main $(TARGET): main.cpp $(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -o $@
以下の.travis.yml
language: cpp compiler: - clang++ - g++ script: - make CXX=${CXX} - ./main
をレポジトリ直下に置けばOKです。ここで、yamlファイルの変数${CXX}には、travisが勝手に適切な値を入れてくれます。
このコードのソースとテスト結果です。
- minus9d/TestTravisCi at 581ddc87098ee49fe4ffef36e1c4862125ee6a55
- Build #4 - minus9d/TestTravisCi - Travis CI
C++14
clang 5.0.0はC++14対応していますが、gcc 4.8.4はC++14対応していないため、対策が必要です。
以下のMakefileと
CXX = g++ CXXFLAGS = -W -Wall -std=c++14 TARGET = main $(TARGET): main.cpp $(CXX) $(CPPFLAGS) $(CXXFLAGS) $^ -o $@
以下の.travis.yml
language: cpp matrix: include: - compiler: clang++ - compiler: g++ addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-5 env: - MATRIX_EVAL="CC=gcc-5 && CXX=g++-5" before_install: - eval "${MATRIX_EVAL}" script: - make CXX=${CXX} - ./main
をレポジトリ直下に置きます。g++の方のみ追加オプションを利用してg++5を使えるようにしています。
このコードのソースとテスト結果です。
- minus9d/TestTravisCi at a7948f256eff17a40097be2287759ea879932728
- Build #8 - minus9d/TestTravisCi - Travis CI