【问题标题】:Travis CI with Clang 3.4 and C++11Travis CI 与 Clang 3.4 和 C++11
【发布时间】:2014-04-02 10:08:28
【问题描述】:

是否可以让 Travis CI 与支持 C++11 的 Clang 一起工作? (我想要 Clang,而不是 GCC,我已经在 Travis CI 中使用了 GCC 4.8。)似乎预装的版本不支持 C++11。我安装任何新版本的所有尝试最终都以failing because of this:

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__ trick,但这与我的其他事情发生冲突。

是否有可能让它工作?另请参阅我的.travis.yml。

【问题讨论】:

标签: c++ c++11 clang travis-ci clang++


【解决方案1】:

现在有a better way to do this。

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

(根据 Travis 支持,显式的 sudo: false 将让它在 Docker 中构建(为了速度),即使你有一个 pre-docker repo。)

感谢 Travis 支持的 solarce 注意到我的错误并修复了文档。

【讨论】:

  • 支持c++11的clang++怎么样?
  • 谢谢。我看到白名单没有clang++。所以我猜c ++ 11 with clang不适用于travisci?我正在手动设置 libc++。
  • 我们使用的是 C++11,我们为 g++ 和 clang++ 构建。请参阅one of our Travis builds 中的-std=c++11。 Travis 日志的第一行表示一个 dockerized 构建。您也可以检查该版本的 .travis.yml。
  • 在before_install: 的情况下设置CC 和CPP 标志,例如node_js,以避免覆盖标准的install: 命令。节省了在 Node 4.x 上测试 github.com/audreyt/node-webworker-threads 的时间。
【解决方案2】:

这是我的 .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

【讨论】:

  • 这仍然对您有用吗?无论我尝试什么,我在 Travis 上的构建都失败了,'iostream' file not found。
  • @JaredBurrows 我已经有 9 个月没有碰过 travis,但我只是进行了一次测试,是的,它今天仍然有效。 travis-ci.org/richoux/Wall-in/jobs/61990830你确定给下面的clang选项-stdlib=libc++
  • 感谢您发布此信息。我会将您的构建与我的构建进行比较。
【解决方案3】:

当您在-std=gnu++11 模式下构建时,clang 开发人员似乎修复了这个问题。

你能用那个标志而不是__STRICT_ANSI__来构建吗?

【讨论】:

  • 所以我们可以使用-std=gnu++11或-std=gnu++11 -stdlib=libc++来代替-std=c++11 -stdlib=libc++?
  • @JaredBurrows:如果您使用的是 libc++,您根本不会看到这个错误。这个错误是由于 clang 和 libstdc++ 之间的冲突造成的。
  • 我正在尝试构建一个使用 C 和 C++ 的 TravisCI 项目。它可以使用 gcc 和 clang(本地)编译,但不能在 TravisCI 上编译,clang 失败。我正在使用 cmake。根据 Florian 的回答,TravisCI 似乎缺少库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多