[英]How can I make CMake use GCC instead of Clang on Mac OS X?
我找不到任何關於它的信息,但只能反過來(例如,如何設置 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 3.7.1 的系統上,我必須執行cmake -H. -Bbuild -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX
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 將失敗。 請注意,您必須在項目行之前設置這些變量,因為此命令用於查找和配置編譯器。
我猜 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
只是補充一點,還有一個 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 ..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.