我找不到任何关于它的信息,但只是相反(例如,如何设置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
答案 0 :(得分:71)
CMake没有收听CC
和CXX
。而是使用CMAKE_C_COMPILER
和CMAKE_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++
默认情况下是 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
答案 4 :(得分:0)
使用CC
和CXX
环境变量就足够了,但是在macOS中不能“按预期工作”。
但是它以这种方式起作用,例如:
CXX="gcc-8" CC="gcc-8" cmake ..