我找不到任何关于它的信息,但只有相反的方式(例如,如何设置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'
Run Code Online (Sandbox Code Playgroud)
然而,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
Run Code Online (Sandbox Code Playgroud)
rub*_*nvb 78
CMake不听CC和CXX.而是使用CMAKE_C_COMPILER和CMAKE_CXX_COMPILER:
cmake -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ ...
Run Code Online (Sandbox Code Playgroud)
另请参阅文档.
或者,您可以提供工具链文件,但在这种情况下可能有点过分.
小智 12
我猜 OP 中的案例是在 macOS 上运行的,真正的问题是/usr/bin/gcc和/usr/bin/g++默认情况下是clang和clang++。
% ls -al /usr/bin/clang
-rwxr-xr-x 1 root wheel 167088 8 Dec 07:39 /usr/bin/clang
% ls -al /usr/bin/gcc
-rwxr-xr-x 1 root wheel 167088 8 Dec 07:39 /usr/bin/gcc
% /usr/bin/gcc --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 13.0.0 (clang-1300.0.29.30)
Target: x86_64-apple-darwin21.2.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
Run Code Online (Sandbox Code Playgroud)
避免这种情况的一种方法是安装 gcc/g++,然后使用版本化的二进制名称。
% which gcc-11 g++-11
/usr/local/bin/gcc-11
/usr/local/bin/g++-11
% gcc-11 --version
gcc-11 (Homebrew GCC 11.2.0_3) 11.2.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)
所以,而不是
cmake .. -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++
Run Code Online (Sandbox Code Playgroud)
有人会用
cmake .. -DCMAKE_C_COMPILER=/usr/local/bin/gcc-11 -DCMAKE_CXX_COMPILER=/usr/local/bin/g++-11
Run Code Online (Sandbox Code Playgroud)
当前版本的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)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果找不到指定的编译器,则cmake将失败.请注意,必须在项目行之前设置这些变量,因为此命令是查找和配置编译器的.
| 归档时间: |
|
| 查看次数: |
67617 次 |
| 最近记录: |