在TravisCI下为cmake更改C ++编译器

时间:2014-08-29 11:30:29

标签: c++ cmake travis-ci biicode

据我所知,更改cmake使用的目标C ++编译器的最佳方法是在调用cmake之前更改CXX环境变量:

$ export CXX="clang++" && cmake --build

Travis CI构建会根据构建的设置相应地设置CXXCC。所以如果你在.travis.yml

中有这个
language: cpp
compiler: 
  - gcc
  - clang

script:
  - cmake --build
  - ./bin/foo

第一次cmake应该使用GCC而Clang不是后者?

相反,GCC构建编译得很好(它是cmake使用的默认编译器),但Clang版本也使用GCC:

  

0.01s $ echo $ CC $ CXX
  clang clang ++
  命令“echo $ CC $ CXX”以0退出。

     

0.02s $ $ CXX - 版本
  clang 3.4版(标签/ RELEASE_34 / final)目标:x86_64-unknown-linux-gnu线程模型:posix

     

正在运行:cmake -G“Unix Makefiles”-Wno-dev ../cmake
   - C编译器标识是GNU
   - CXX编译器标识是GNU
   - 检查工作C编译器:/ usr / bin / gcc
   - 检查工作C编译器:/ usr / bin / gcc - 工作
   - 检测C编译器ABI信息
   - 检测C编译器ABI信息 - 完成
   - 检查CXX编译器是否正常工作:/ usr / bin / c ++
   - 检查工作CXX编译器:/ usr / bin / c ++ - 工作
   - 检测CXX编译器ABI信息
   - 检测CXX编译器ABI信息 - 完成

我甚至试图在通话之前再次设置这些变量:

- if [ "$CXX" == "clang++" ]; then export CXX="clang++" && cmake --build; fi
- if [ "$CXX" == "g++" ];     then export CXX="g++"     && cmake --build; fi

我认为这没什么意义......

Here是使用GCC的成功构建,here是(假定为)clang构建。

我的问题是:如何在Travis CI下更改cmake使用的编译器?

Here是我的.travis.yml。

2 个答案:

答案 0 :(得分:11)

说明

.travis.yml我们看到:

- if [ "$CXX" == "clang++" ]; then export CXX="clang++" && bii cpp:build; fi
- if [ "$CXX" == "g++" ];     then export CXX="g++"     && bii cpp:build; fi

biicode的命令bii cpp:build使用biicode的默认生成器运行CMake,对于UNIX平台(GNU工具链)"Unix Makefiles"。阅读:Biicode C++ documentation - Generators and IDEs

您的日志中会显示此行为:Running: cmake -G "Unix Makefiles" -Wno-dev ../cmakehttps://travis-ci.org/Manu343726/Turbo/jobs/33889114,第257行)

CMake并不总是寻找环境变量CXX/CC(如CMake FAQ中所述)。这取决于选定的发电机。当我在没有生成器的情况下调用CMake时,它对我有用(我的travis文件:https://github.com/quepas/Graph-ene/blob/master/.travis.yml)。

解决方案

答案 1 :(得分:1)

您可以使用矩阵。如果您有许多不同的编译器(例如gcc5,gcc6,clang3.7,clang3.8),这将特别有用:

language: generic # Works better in most cases

matrix:
    include:
    - env: CXX=g++ CC=gcc
      # additional apt settings if needed
    - env: CXX=clang++ CC=clang

script:
    - ...

如果你有不同版本的编译器,可以扩展它:

[…]
matrix:
    include:
    - env: CXX=g++-5 CC=gcc-5
    - env: CXX=g++-6 CC=gcc-6
    - env: CXX=clang++-3.8 CC=clang-3.8
[…]

它也不会复制脚本步骤并保持文件清除 if ... else ... 部分。

https://travis-ci.org/RhysU/descendu/builds/158055261