簡體   English   中英

在TravisCI下為cmake更改C ++編譯器

[英]Change C++ compiler for cmake under TravisCI

到目前為止,我知道更改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

我覺得這沒什么意義......

是使用GCC的成功構建, 這里是(假定為)clang構建。

我的問題是: 如何在Travis CI下更改cmake使用的編譯器?

是我的.travis.yml。

說明

.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平台的"Unix Makefiles" (GNU工具鏈)。 閱讀: Biicode C ++文檔 - 生成器和IDE

這種行為被認為是在你的日志: 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 )。

解決方案

你可以使用矩陣。 如果您有許多不同的編譯器(例如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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM