8

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

$ 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 --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

我认为这没有多大意义......

是使用 GCC 的成功构建,这里是(应该是)clang 构建。

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

是我的 .travis.yml。

4

2 回答 2

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的命令使用适用于 UNIX 平台(GNU 工具链)的默认生成器bii cpp:build运行 CMake 。阅读它:Biicode C++ 文档 - 生成器和 IDEbiicode"Unix Makefiles"

在您的日志中可以看到这种行为:(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 )。

解决方案

于 2014-10-19T09:25:42.010 回答
1
于 2016-11-19T17:31:06.720 回答