web-dev-qa-db-ja.com

Travis CIとClang 3.4およびC ++ 11

Travis CIをC++ 11対応のClangで動作させることは可能ですか? (GCCではなくClangが必要です。TravisCIでGCC 4.8がすでに動作しています。)プレインストールされているバージョンはC++ 11対応ではないようです。新しいバージョンをインストールしようとする私の試みはすべて結局 これが原因で失敗します

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>

-D__STRICT_ANSI__トリック しかし、それは私にとって他のものと衝突します。

それを機能させることは可能ですか? my 。travis.yml も参照してください。

38
wilx

これが私の.travis.ymlファイルの一部です(主に this file から取得)。

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

[〜#〜] edit [〜#〜]travisにlibc ++を追加すると非常に便利なためです。私の知る限り、libc ++のLinuxパッケージはないため、「手動」でコンパイルする必要があります。 clangでコンパイルしている間、CXXFLAGSの-stdlib = libc ++を忘れないでください。

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

これを行うためのより良い方法 があります。

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

(明示的なSudo: falseは、Travisのサポートによると、Dockerの前のリポジトリがある場合でも、Dockerで(速度を上げるために)ビルドできるようにします。)

Travisサポートの solarce のおかげで、エラーに気づき、ドキュメントを修正してくれました。

61
cdunn2001

-std=gnu++11モードでビルドすると、clang開発者がこれを修正したようです。

__STRICT_ANSI__の代わりにそのフラグを使用してビルドできますか?

1
Bill Lynch