Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改C++;TravisCI下的cmake编译器 P>我知道改变Cube所使用的目标C++编译器的最佳方法是在调用CMAG:/P>之前更改 CXX/COD>环境变量。 $ export CXX="clang++" && cmake --build_C++_Cmake_Travis Ci_Biicode - Fatal编程技术网

更改C++;TravisCI下的cmake编译器 P>我知道改变Cube所使用的目标C++编译器的最佳方法是在调用CMAG:/P>之前更改 CXX/COD>环境变量。 $ export CXX="clang++" && cmake --build

更改C++;TravisCI下的cmake编译器 P>我知道改变Cube所使用的目标C++编译器的最佳方法是在调用CMAG:/P>之前更改 CXX/COD>环境变量。 $ export CXX="clang++" && cmake --build,c++,cmake,travis-ci,biicode,C++,Cmake,Travis Ci,Biicode,Travis CI构建根据构建的设置相应地设置CXX和CC。因此,如果您的.travis.yml中有此项: language: cpp compiler: - gcc - clang script: - cmake --build - ./bin/foo 第一次cmake应该使用GCC和Clang,后者不是吗 相反,GCC版本编译得很好(它是cmake使用的默认编译器),但Clang版本也使用GCC: 0.01s$echo$CC$CXX 铿锵铿锵+++ 命令“echo$CC

Travis CI构建根据构建的设置相应地设置
CXX
CC
。因此,如果您的
.travis.yml
中有此项:

language: cpp
compiler: 
  - gcc
  - clang

script:
  - cmake --build
  - ./bin/foo
第一次
cmake
应该使用GCC和Clang,后者不是吗

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

0.01s$echo$CC$CXX
铿锵铿锵+++
命令“echo$CC$CXX”以0退出

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

正在运行:cmake-G“Unix生成文件”-Wno dev../cmake
--C编译器标识为GNU
--CXX编译器标识为GNU
--检查C编译器是否工作:/usr/bin/gcc
--检查C编译器是否工作:/usr/bin/gcc--works
--检测C编译器ABI信息
--检测C编译器ABI信息-完成
--检查CXX编译器是否正常工作:/usr/bin/c++
--检查CXX编译器是否正常工作:/usr/bin/c++--works
--检测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的成功构建,以及(应该是)铿锵构建

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

这是我的.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平台(GNU工具链)的
“Unix Makefiles”
。阅读相关信息:

此行为可以在日志中看到:
正在运行:cmake-G“Unix makefile”-Wno dev../cmake
(,第257行)

CMake并不总是查找环境变量
CXX/CC
(如中所述)。它取决于所选的生成器。当我在没有生成器的情况下调用CMake(我的travis文件:)时,它适用于我

解决
  • 将CMake单独与方法2中描述的
    CMake-D
    格式一起使用()
  • 设置
    biicode
    以使用正确的CMake生成器()或使用
    biicode
    的自定义工具链()

    • 您可以使用矩阵。如果您有许多不同的编译器(例如gcc5、gcc6、clang3.7、clang3.8),这一点尤其有用:

      如果您有不同版本的编译器,则可以对其进行扩展:

      […]
      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…部分


      cmake第一次应该使用GCC,而在后者上使用Clang不是吗?
      这种方法应该可以很好地工作。但是我更喜欢使用cmake工具链,它更灵活。示例:和@ruslo,但不起作用。如您所见,cmake完全摆脱了
      CXX
      的值,即
      clang++
      […]
      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
      […]