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

Man*_*726 8 c++ cmake travis-ci biicode

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

$ export CXX="clang++" && cmake --build
Run Code Online (Sandbox Code Playgroud)

Travis CI构建设置CXXCC相应地设置构建.所以,如果你有这个.travis.yml:

language: cpp
compiler: 
  - gcc
  - clang

script:
  - cmake --build
  - ./bin/foo
Run Code Online (Sandbox Code Playgroud)

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

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

0.01s $ echo $ CC $ CXX
clang clang ++
命令"echo $ CC $ CXX"退出0.

0.02s $ $ CXX --version
clang version 3.4(tags/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
Run Code Online (Sandbox Code Playgroud)

我觉得这没什么意义......

是使用GCC的成功构建,这里是(假定为)clang构建.

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

是我的.travis.yml.

Que*_*pas 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
Run Code Online (Sandbox Code Playgroud)

biicode的命令bii cpp:build运行CMake biicode的默认生成器,"Unix Makefiles"用于UNIX平台(GNU工具链).阅读:Biicode C++文档 - 生成器和IDE.

在您的日志中可以看到此行为:Running: cmake -G "Unix Makefiles" -Wno-dev ../cmake(https://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).

解决方案