Est-il possible de faire fonctionner Travis CI avec Clang qui est capable de C++ 11? (Je veux Clang, pas GCC, j'ai déjà GCC 4.8 fonctionnant dans Travis CI.) Il semble que la version préinstallée n'est pas compatible C++ 11. Toutes mes tentatives d'installation d'une version plus récente finissent échec à cause de cela :
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/move.h:57:
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:269:39: error:
use of undeclared identifier '__float128'
struct __is_floating_point_helper<__float128>
J'ai vu le -D__STRICT_ANSI__
astuce mais qui se heurte à d'autres choses pour moi.
Est-il possible de le faire fonctionner? Voir aussi mon . Travis.yml .
Voici une partie de mes fichiers .travis.yml (principalement tirés de ce fichier ).
language: cpp
compiler:
- clang
- gcc
before_install:
# g++4.8.1
- if [ "$CXX" == "g++" ]; then Sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi
# clang 3.4
- if [ "$CXX" == "clang++" ]; then Sudo add-apt-repository -y ppa:h-rayflood/llvm; fi
- Sudo apt-get update -qq
install:
# g++4.8.1
- if [ "$CXX" = "g++" ]; then Sudo apt-get install -qq g++-4.8; fi
- if [ "$CXX" = "g++" ]; then export CXX="g++-4.8"; fi
# clang 3.4
- if [ "$CXX" == "clang++" ]; then Sudo apt-get install --allow-unauthenticated -qq clang-3.4; fi
- if [ "$CXX" == "clang++" ]; then export CXX="clang++-3.4"; fi
script:
- $CXX --version
[~ # ~] éditez [~ # ~] car il peut être très utile d'ajouter libc ++ pour travis. À ma connaissance, il n'y a pas de paquet Linux pour libc ++, donc il faut le compiler "à la main". N'oubliez pas - stdlib = libc ++ dans CXXFLAGS lors de la compilation avec clang.
install:
# clang 3.4
- if [ "$CXX" == "clang++" ]; then Sudo apt-get install --allow-unauthenticated -qq clang-3.4; fi
- if [ "$CXX" == "clang++" ]; then export CXXFLAGS="-std=c++0x -stdlib=libc++"; fi
- if [ "$CXX" == "clang++" ]; then svn co --quiet http://llvm.org/svn/llvm-project/libcxx/trunk libcxx; fi
- if [ "$CXX" == "clang++" ]; then cd libcxx/lib && bash buildit; fi
- if [ "$CXX" == "clang++" ]; then Sudo cp ./libc++.so.1.0 /usr/lib/; fi
- if [ "$CXX" == "clang++" ]; then Sudo mkdir /usr/include/c++/v1; fi
- if [ "$CXX" == "clang++" ]; then cd .. && Sudo cp -r include/* /usr/include/c++/v1/; fi
- if [ "$CXX" == "clang++" ]; then cd /usr/lib && Sudo ln -sf libc++.so.1.0 libc++.so; fi
- if [ "$CXX" == "clang++" ]; then Sudo ln -sf libc++.so.1.0 libc++.so.1 && cd $cwd; fi
- if [ "$CXX" == "clang++" ]; then export CXX="clang++-3.4"; fi
Sudo: false
dist: trusty
language: cpp
os:
- linux
compiler:
- gcc
- clang
install:
# /usr/bin/gcc is 4.6 always, but gcc-X.Y is available.
- if [[ $CXX = g++ ]]; then export CXX="g++-4.9" CC="gcc-4.9"; fi
# /usr/bin/clang has a conflict with gcc, so use clang-X.Y.
- if [[ $CXX = clang++ ]]; then export CXX="clang++-3.5" CC="clang-3.5"; fi
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- llvm-toolchain-precise-3.5 # not sure why we needed this
packages:
- gcc-4.9
- g++-4.9
- clang-3.5
(L'explicite Sudo: false
le laissera se construire dans Docker (pour la vitesse) même si vous avez un dépôt pré-docker, selon le support de Travis.)
Merci à solarce au support Travis pour avoir remarqué mon erreur et corrigé les documents.
Il semble que les développeurs de clang aient résolu ce problème lors de la génération de -std=gnu++11
mode.
Pouvez-vous construire avec ce drapeau au lieu de __STRICT_ANSI__
?