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

8
据我所知,改变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.01秒$ echo $CC $CXX
clang clang++
命令“echo $CC $CXX”退出并带有0。

0.02秒$ $CXX --version
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

我觉得这没有太多意义...

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

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

这里是我的.travis.yml文件。


第一次使用cmake时,应该在后者上使用GCC和Clang吗?这种方法应该可以正常工作。但是我更喜欢使用cmake工具链,它更加灵活。例如:linuxmac - user2288008
@ruslo 不起作用。正如您在这里所看到的,cmake完全从CXX的值中去除了clang ++ - Manu343726
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的命令bii cpp:build会使用biicode默认的生成器在UNIX平台(GNU工具链)上运行CMake,该生成器是"Unix Makefiles"。阅读更多信息:Biicode C++文档 - 生成器和IDEs

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

解决方案


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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接