Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11 如何使用travis ci构建现代c++;使用现代cmake? P>是否可以使用特拉维斯CI构建一个使用CMAX、GCC-6和G+-6?< P>的C++应用程序/项目,配置特拉维斯使用正确的编译器有点棘手。 这是如何做到的:_C++11_Gcc_Cmake_Travis Ci - Fatal编程技术网

C++11 如何使用travis ci构建现代c++;使用现代cmake? P>是否可以使用特拉维斯CI构建一个使用CMAX、GCC-6和G+-6?< P>的C++应用程序/项目,配置特拉维斯使用正确的编译器有点棘手。 这是如何做到的:

C++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 -

首先,您需要将发行版设置为trusty(travis ci支持的ubuntu的最新版本),并需要sudo

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