C++11 如何使用travis ci构建现代c++;使用现代cmake? P>是否可以使用特拉维斯CI构建一个使用CMAX、GCC-6和G+-6?< P>的C++应用程序/项目,配置特拉维斯使用正确的编译器有点棘手。 这是如何做到的:
首先,您需要将发行版设置为trusty(travis ci支持的ubuntu的最新版本),并需要sudoC++11 如何使用travis ci构建现代c++;使用现代cmake? P>是否可以使用特拉维斯CI构建一个使用CMAX、GCC-6和G+-6?< P>的C++应用程序/项目,配置特拉维斯使用正确的编译器有点棘手。 这是如何做到的:,c++11,gcc,cmake,travis-ci,C++11,Gcc,Cmake,Travis Ci,首先,您需要将发行版设置为trusty(travis ci支持的ubuntu的最新版本),并需要sudo dist: trusty sudo: require 接下来,我们设置语言和编译器: language: cpp compiler: gcc 到目前为止还不错。现在,我们可以开始设置apt安装配置: addons: apt: sources: - ubuntu-toolchain-r-test packages: - gcc-6 -
dist: trusty
sudo: require
接下来,我们设置语言和编译器:
language: cpp
compiler: gcc
到目前为止还不错。现在,我们可以开始设置apt安装配置:
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- gcc-6
- g++-6
- cmake
这将为我们的构建工具的较新版本添加ppa并安装它们。下一步是建立到新gcc和g++的链接<代码>/usr/local/bin在/usr/bin
之前被搜索,因此我们新安装的版本6编译器将只需gcc
和g++
即可访问。脚本的开头:
应该如下所示:
script:
- sudo ln -s /usr/bin/gcc-6 /usr/local/bin/gcc
- sudo ln -s /usr/bin/g++-6 /usr/local/bin/g++
dist: trusty
sudo: required
language:
- cpp
compiler:
- gcc
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- gcc-6
- g++-6
- cmake
script:
# Link gcc-6 and g++-6 to their standard commands
- ln -s /usr/bin/gcc-6 /usr/local/bin/gcc
- ln -s /usr/bin/g++-6 /usr/local/bin/g++
# Export CC and CXX to tell cmake which compiler to use
- export CC=/usr/bin/gcc-6
- export CXX=/usr/bin/g++-6
# Check versions of gcc, g++ and cmake
- gcc -v && g++ -v && cmake --version
# Run your build commands next
如果要验证这些工具的版本,请添加下一行:
- gcc -v && g++ -v && cmake --version
从这些命令返回的版本如下:
gcc: 6.2.0
g++: 6.2.0
cmake: 3.2.2
基本上就是这样。完整的.travis.yml如下所示:
script:
- sudo ln -s /usr/bin/gcc-6 /usr/local/bin/gcc
- sudo ln -s /usr/bin/g++-6 /usr/local/bin/g++
dist: trusty
sudo: required
language:
- cpp
compiler:
- gcc
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- gcc-6
- g++-6
- cmake
script:
# Link gcc-6 and g++-6 to their standard commands
- ln -s /usr/bin/gcc-6 /usr/local/bin/gcc
- ln -s /usr/bin/g++-6 /usr/local/bin/g++
# Export CC and CXX to tell cmake which compiler to use
- export CC=/usr/bin/gcc-6
- export CXX=/usr/bin/g++-6
# Check versions of gcc, g++ and cmake
- gcc -v && g++ -v && cmake --version
# Run your build commands next
我在@henne90gen的答案中发现了一些错误(或者他们刚刚改变了)。具体而言:
- 您不需要
sudo
- 您不需要从apt安装CMake。这将从Trusty安装一个古老的CMake 2.8。幸运的是,CMake 3.9.2(截至目前)已经提供了构建映像
未安装到gcc-7
,并且它已在/usr/local/bin
路径中
dist: trusty
language: cpp
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- gcc-7
- g++-7
script:
- export CC=gcc-7
- export CXX=g++-7
- ...
下面是一个较长的示例,其中包括一个现代版本的Qt(我正在使用QtSVG),它可以在OSX和Linux上工作
os:
- linux
- osx
language: cpp
dist: trusty
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- sourceline: "ppa:beineri/opt-qt-5.10.1-trusty"
packages:
- gcc-7
- g++-7
- qt510-meta-minimal
- qt510svg
- qt510imageformats
- qt510tools
before_install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
brew update ;
brew install qt5 cmake ;
brew link --force qt ;
fi
script:
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
export CC=gcc-7 ;
export CXX=g++-7 ;
source /opt/qt510/bin/qt510-env.sh ;
fi
- cmake --version
- qmake --version
- ...
在与此斗争太久之后添加半相关的解决方案。希望它能帮助其他人避免像我一样花大量的时间去更新travis.yml、提交、等待travis…重复直到成功 我在一个Python项目中有一个C扩展,它开始在Travis中生成失败的测试,但在本地通过了测试。最终,我在xenial环境中找到了旧版本的
gcc
。以下是Travis YAML文件,它最终为我解决了这个问题:
dist: xenial
language: python
before_install:
- sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
- sudo apt-get update -q
- sudo apt-get install -y gcc-7
- export CC=/usr/bin/gcc-7
python:
- "3.6"
- "3.7"
install:
- pip install -r requirements.txt
- python setup.py build_ext --inplace
script:
- python run_tests.py
顺便说一句,其他人发现他们想在特定的提交上触发Travis构建,以找出问题的确切起因吗 使用
dist:bionic
。这应该可以满足大多数情况。取消链接的但是有i)通过更新备选方案的Debian/Ubuntu方法和/或ii)您可以设置CXX
。感谢您的反馈。这是我能想到的第一件稳定的事情。我将编辑取消链接的部分,并改用CC和CXX。此外,您不需要sudo
——您是该脚本的根用户。最后,另一个技巧是链接到一个新的/usr/local/bin/g++
(Debian不会填充/usr/local/
,它保证为空),因为它将在/usr/bin
之前进行搜索。以防构建脚本不尊重CC
,CXX
,…太棒了,这正是我所缺少的内部功能我认为答案应该更新,以包括“现代cmake”以及。你从可靠的回购协议中得到了什么版本?我有clang-3.9和g++-6供参考。为什么你更喜欢仿生而不是xenial或trusty?只是好奇。Trusty似乎已经过时了,所以仿生和xenial似乎比Trusty更可取,但为什么仿生而不是xenial呢?仿生似乎比xenial更新,所以这是我的另一个原因。还有其他的吗?谢谢非常感谢。我一直在寻找这个答案!我试过了,它安装了g++7.5.0。但是,由于variant
s未定义,我仍然会遇到一些错误。你知道如何制作或使用-std=c++17吗?