如何让CMake在Mac OS X上使用GCC而不是Clang?

时间:2014-06-24 07:09:27

标签: c++ cmake

我找不到任何关于它的信息,但只是相反(例如,如何设置CMake使用clang)。

我使用brew安装了gcc-4.8,设置了所有依赖项,标题等,现在CMake拒绝使用gcc。

我已经使用别名和实际条目设置了bash配置文件:

export CC=/usr/bin/gcc
export CXX=/usr/bin/g++
alias gcc='gcc-4.8'
alias cc='gcc-4.8'
alias g++='g++-4.8'
alias c++='c++-4.8'

然而,CMake顽固地拒绝使用gcc,而是回归到clang:

air:build alex$ cmake -DCMAKE_BUILD_TYPE=DEBUG ..
-- The C compiler identification is Clang 5.1.0
-- The CXX compiler identification is Clang 5.1.0
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works

5 个答案:

答案 0 :(得分:71)

CMake没有收听CCCXX。而是使用CMAKE_C_COMPILERCMAKE_CXX_COMPILER

cmake -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ ...

另请参阅documentation

或者,您可以提供toolchain file,但在这种情况下可能会有点过分。

答案 1 :(得分:6)

当前版本的CMake不像人们期望的那样尊重CC和CXX环境变​​量。特别是如果它们是编译器二进制文件的绝对路径,则它们似乎被忽略。在我的系统上使用新编译的cmake 3.7.1我必须cmake -H. -Bbuild -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX

正如其他人所说,强制在CMakeLists.txt中选择编译器并不是一个好主意,但是如果您的用例需要这样做,请按照以下方式进行:

cmake_minimum_required(VERSION 3.5) # Or whatever version you use

# THIS HAS TO COME BEFORE THE PROJECT LINE
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_COMPILER "g++")
# THIS HAS TO COME BEFORE THE PROJECT LINE

project(my_project VERSION 0.0.0 LANGUAGES C CXX)

在这种情况下,如果找不到指定的编译器,cmake将失败。请注意,必须在项目行之前设置这些变量,因为此命令是查找和配置编译器的。

答案 2 :(得分:1)

只是补充说还有一个CMake变量" CMAKE_Fortran_COMPILER"拿起GNU Fortran而不是clang fortran。但在documentation

中似乎缺失了

cmake -DCMAKE_Fortran_COMPILER = / usr /.../ bin / gfortran-6.x.0

答案 3 :(得分:1)

我猜 OP 中的案例是在 macOS 上运行的,真正的问题是 /usr/bin/gcc/usr/bin/g++ 默认情况下是 clangclang++。 (通过在 bash 配置文件中注释所有“别名”来验证这一点,重新启动终端并输入 gcc --version。)

所以,而不是

cmake .. -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++

应该使用

cmake .. -DCMAKE_C_COMPILER=/usr/bin/gcc-4.8 -DCMAKE_CXX_COMPILER=/usr/bin/g++-4.8

答案 4 :(得分:0)

使用CCCXX环境变量就足够了,但是在macOS中不能“按预期工作”。

但是它以这种方式起作用,例如:

CXX="gcc-8" CC="gcc-8" cmake ..