在Travis中为CMAKE构建指定编译器版本

Specifying compiler versions in travis for cmake builds

本文关键字:编译器 版本 构建 Travis 中为 CMAKE      更新时间:2023-10-16

travis构建C 项目文档显示了如何在构建矩阵中指定GCC和Clang编译器版本。但是,它确实不是展示了如何使用CMAKE使用这些编译器构建项目。

我根据Travis文档(即:

(修改了.travis.yml文件以指定GCC 9和Clang 8
matrix:
  include:
    - compiler: gcc
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
          packages:
            - g++-9
      env:
        - MATRIX_EVAL="CC=gcc-9 && CXX=g++-9"
    - compiler: clang
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
            - llvm-toolchain-bionic-8
          packages:
            - clang-8
            - libstdc++-8-dev
      env:
        - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8"
before_install:
  - eval "${MATRIX_EVAL}"
  - pip install --user cpp-coveralls
...
script:
  - mkdir _builds
  - cd _builds
  - cmake -DVIA_HTTPLIB_UNIT_TESTS=ON -DVIA_HTTPLIB_COVERAGE=ON ${CMAKE_OPTIONS} .. 
  - make
  - ./via-httplib_test

但是是在运行cmake时引起的构建错误,例如:

$ cmake -DVIA_HTTPLIB_UNIT_TESTS=ON -DVIA_HTTPLIB_COVERAGE=ON ${CMAKE_OPTIONS} ..
CMake Error at /usr/local/cmake-3.12.4/share/cmake-3.12/Modules/CMakeDetermineCCompiler.cmake:48 (message):
  Could not find compiler set in environment variable CC:
  gcc-9.
Call Stack (most recent call first):
  CMakeLists.txt:9 (project)

CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
See also "/home/travis/build/kenba/via-httplib/_builds/CMakeFiles/CMakeOutput.log".
The command "cmake -DVIA_HTTPLIB_UNIT_TESTS=ON -DVIA_HTTPLIB_COVERAGE=ON ${CMAKE_OPTIONS} .." exited with 1.

我尝试通过为CMAKE指定CMAKE_C_COMPILERCMAKE_CXX_COMPILER来修复错误,但我无法使其工作。但是,它可以正确构建:

  env:
    - MATRIX_EVAL="CC=gcc && CXX=g++"
  ...
  env:
    - MATRIX_EVAL="CC=clang && CXX=clang++"

但使用默认的仿生gccclang编译器,即:GCC 7.4.0和Clang 7, GCC 9和Clang 8。

如何编写.travis.yml文件,以便cmake可以找到和使用矩阵中指定的编译器版本?

也许这是特拉维斯问题?只需添加g -9包,然后将变量更改为matrix_eval =" cc = gcc-9& amp;&&& cxx = g -9"导致您的项目成功地汇编了您的项目使用GCC 9.3.0

这是我用于构建项目的最小示例:

language: cpp
matrix:
  include:
    - os: linux
      addons:
        apt:
          sources:
            - sourceline: 'ppa:ubuntu-toolchain-r/test'
          packages:
            - clang-8
      env:
        - MATRIX_EVAL="CC=clang-8 CXX=clang++-8"
    - os: linux
      addons:
        apt:
          sources:
            - sourceline: 'ppa:ubuntu-toolchain-r/test'
          packages:
            - g++-9
      env:
        - MATRIX_EVAL="CC=gcc-9 CXX=g++-9"
before_install:
  - eval "${MATRIX_EVAL}"
script:
  - cmake .
  - make