Travis CI with Clang 3.4 and C++11
Travis CI with Clang 3.4 and C++11
是否有可能让Travis CI与能够C++11的Clang一起工作?(我想要Clang,而不是GCC,我已经有GCC 4.8在Travis CI中工作。似乎预装的版本不支持 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__
技巧,但这对我来说与其他事情相冲突。
有可能让它工作吗?另请参阅我的.travis.yml。
现在有更好的方法来做到这一点。
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 中构建(为了速度),即使您有一个预 docker 存储库。
感谢 Travis 的 solarce 支持注意到我的错误并修复文档。
- http://docs.travis-ci.com/user/apt/
- http://genbattle.bitbucket.org/blog/2016/01/17/c++-travis-ci/
- https://github.com/open-source-parsers/jsoncpp/blob/master/.travis.yml(用于最新示例)
这是我
的.travis.yml文件的一部分(主要取自这个文件)。
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
编辑,因为为 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
当您以-std=gnu++11
模式构建时,clang开发人员似乎修复了此问题。
你能用那个标志而不是__STRICT_ANSI__
来建造吗?
- http://llvm.org/bugs/show_bug.cgi?id=13530
- http://llvm.org/viewvc/llvm-project?view=revision&revision=184476
相关文章:
- overloading [] and , c++11
- wxWidgets 3.1.0 and Mac OS X El Capitan (10.11)
- C 11构造函数参数:std ::移动和值或std :: forward and rvalue参考
- Qt 5.0 and c++11 with OSX Mountain Lion
- g++ (MinGW), C++11 and SSE
- Travis CI with Clang 3.4 and C++11
- C 11 std :: bind and auto的编译错误,用于回调函数参数
- char16_t and char32_t types in C++11
- Eigen and MKL 11.2
- Emacs, cedet and c++/c++11 support
- Qt Slots and C++11 lambda
- C++11 on MicroVision 5.13 and ARMCC 5.05
- C++11 and Win32 wchar_t
- RTTI support for C++11 ( _CPPRTTI and __GNUG__ )
- C++11 lvalue, rvalue and std::move()
- WPF and DirectX 11 via D3DImage
- java and C++11 volatile
- boost::multiprecision::float128 and C++11
- Eclipse, minGW and C++11
- Visual Studio 2012 __cplusplus and C++ 11