web-dev-qa-db-fra.com

Travis CI avec Clang 3.4 et C ++ 11

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 .

38
wilx

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
33
Florian Richoux

Il y a maintenant ne meilleure façon de le faire .

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.

61
cdunn2001

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__?

1
Bill Lynch