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++ 我如何让CMake在Mac OS X上使用GCC而不是Clang?_C++_Cmake - Fatal编程技术网

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

C++ 我如何让CMake在Mac OS X上使用GCC而不是Clang?,c++,cmake,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' 然而,CMa

我找不到关于它的任何信息,但只有另一种方法(例如,如何将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
CMake不(总是)听
CC
CXX
。而是使用
CMAKE\u C\u编译器
CMAKE\u CXX\u编译器

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


或者,您可以提供一个,但在这种情况下,这可能有点过头了。

当前版本的CMake没有像预期的那样尊重CC和CXX环境变量。特别是,如果它们是编译器二进制文件的绝对路径,它们似乎会被忽略。在使用新编译的cmake 3.7.1的系统上,我必须执行
cmake-H.-Bbuild-DCMAKE\u C\u编译器=$CC-DCMAKE\u CXX\u编译器=$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将失败。请注意,您必须在项目行之前设置这些变量,因为此命令是查找和配置编译器的命令。

只需添加一个CMake变量“CMake_Fortran_COMPILER”,用于拾取GNU Fortran而不是clang Fortran。但它似乎在未来的岁月里消失了


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

使用
CC
CXX
环境变量应该足够了,但在macOS中并没有“按预期工作”

但它是以这种方式工作的,例如:

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

我猜OP中的例子是在macOS上运行的,真正的问题是
/usr/bin/gcc
/usr/bin/g++
默认情况下是
clang
clang++
。(通过注释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

我找到的唯一方法是更改
/usr/bin
中的符号链接,这很乏味-必须有更好的方法。谢谢你,这很有效,但肯定有办法在我的CMakeLists.txt中设置gcc和g+,不是吗?@Alex:你为什么要这样做
CMakelists.txt
意味着尽可能不依赖于平台/工具链。不要强迫任何人做任何事。另外,请参见。使用
-D
语法是否正确™方式。@Pietro这正是为什么您不在CMakelists.txt中硬编码工具链的原因,但是,当您在macbook上使用GCC进行测试构建时,请使用上面的命令(或者使用正确路径的一些变体…),这个答案是不正确的。CMake尊重CC和CXX环境变量。唯一需要注意的是,必须在运行CMake之前设置它们,而不是在生成的构建目录中运行make之前。此外,CMake会缓存这些变量的值,因此一旦创建了构建目录,您可能需要删除该目录并在更改编译器时重新生成。@Eric
CC
/
CXX
仅用于
Makefile
(所有变体)和
Ninja
生成器。