OS saya adalah centos yang memiliki gcc default di jalurnya /usr/bin/gcc
. Tapi sudah lama, saya butuh versi gcc yang baru. Jadi saya menginstal versi baru di jalur baru /usr/local/bin/gcc
.
Namun saat dijalankan cmake
, masih menggunakan versi lama gcc path ( /usr/bin/gcc
). Bagaimana cara menetapkan gcc ke jalur baru ( /usr/local/bin/gcc
).
Saya telah mencoba untuk menimpa /usr/bin/gcc
dengan /usr/local/bin/gcc
, tetapi tidak berhasil.
/opt
daripada/usr/local
. Lebih disukai/opt/gcc-x.y.z
. Dengan cara ini, jika Anda membutuhkan versi yang lebih baru, Anda tidak akan kesulitan mencopot pemasangan yang sebelumnya.Jawaban:
Jangan menimpa
CMAKE_C_COMPILER
, tapi eksporCC
(danCXX
) sebelum memanggil cmake:Ekspor hanya perlu dilakukan satu kali, pertama kali Anda mengonfigurasi proyek, nilai tersebut akan dibaca dari cache CMake.
UPDATE : penjelasan lebih panjang tentang mengapa tidak menimpa
CMAKE_C(XX)_COMPILER
setelah komentar JakeSaya merekomendasikan untuk tidak menimpa
CMAKE_C(XX)_COMPILER
nilai karena dua alasan utama: karena itu tidak akan berfungsi dengan baik dengan cache CMake dan karena itu merusak pemeriksaan kompiler dan deteksi perkakas.Saat menggunakan
set
perintah, Anda memiliki tiga opsi:Mari kita lihat apa yang terjadi untuk tiga kemungkinan panggilan ke
set
:Tanpa cache
Saat melakukan ini, Anda membuat variabel "normal"
CMAKE_C(XX)_COMPILER
yang menyembunyikan variabel cache dengan nama yang sama. Artinya, compiler Anda sekarang telah di-hardcode dalam skrip build Anda dan Anda tidak dapat memberikannya nilai kustom. Ini akan menjadi masalah jika Anda memiliki beberapa lingkungan build dengan kompiler berbeda. Anda bisa memperbarui skrip Anda setiap kali Anda ingin menggunakan kompiler yang berbeda, tetapi itu menghapus nilai menggunakan CMake di tempat pertama.Oke, kalau begitu, mari perbarui cache ...
Dengan cache
Versi ini hanya akan "tidak berfungsi". The
CMAKE_C(XX)_COMPILER
variabel sudah dalam cache, sehingga tidak akan diperbarui kecuali Anda memaksa itu.Ah ... ayo gunakan kekuatan, lalu ...
Paksa cache
Ini hampir sama dengan versi variabel "normal", satu-satunya perbedaan adalah nilai Anda akan disetel di cache, sehingga pengguna dapat melihatnya. Tetapi setiap perubahan akan ditimpa oleh
set
perintah.Memecah pemeriksaan dan perkakas kompiler
Pada awal proses konfigurasi, CMake melakukan pemeriksaan pada kompiler: Apakah berhasil? Apakah itu mampu menghasilkan executable? dll. Ia juga menggunakan kompiler untuk mendeteksi perkakas terkait, seperti
ar
danranlib
. Saat Anda mengganti nilai compiler dalam skrip, ini "terlambat", semua pemeriksaan dan deteksi sudah selesai.Misalnya, di komputer saya dengan gcc sebagai kompilator default, saat menggunakan
set
perintah ke/usr/bin/clang
,ar
disetel ke/usr/bin/gcc-ar-7
. Saat menggunakan ekspor sebelum menjalankan CMake, ini disetel ke/usr/lib/llvm-3.8/bin/llvm-ar
.sumber
which gcc
> export CXX =which g++
export CC=`which gcc` export CXX=`which g++`
Incorrect 'gcc' version 'compiler.version=5.3' is not the one detected by CMake: 'GNU=4.8'
CMAKE_C_COMPILER
bekerja dengan baik asalkan Anda melakukannya dengan menggunakan baris perintah:$ cmake -GNinja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ /path/to/source
.Pertanyaan ini sudah cukup lama tetapi masih muncul di Google Penelusuran. Pertanyaan yang diterima tidak lagi bekerja untuk saya dan tampaknya sudah tua. Informasi terbaru tentang cmake tertulis di FAQ cmake .
Ada berbagai cara untuk mengubah jalur kompilator Anda. Salah satu caranya
alih-alih
gcc-4.2
Anda bisa menulispath/to/your/compiler
seperti inisumber
Setel
CMAKE_C_COMPILER
ke jalur baru Anda.Lihat di sini: http://www.cmake.org/Wiki/CMake_Useful_Variables
sumber
Ekspor harus spesifik tentang versi GCC / G ++ yang akan digunakan, karena jika pengguna memiliki beberapa versi kompilator, itu tidak akan berhasil dikompilasi.
Jika proyek menggunakan C ++ 11, ini dapat ditangani dengan menggunakan
-std=C++-11
flag di CMakeList.txtsumber
Solusi alternatifnya adalah mengonfigurasi proyek Anda melalui cmake-gui, mulai dari direktori build yang bersih. Di antara opsi yang Anda miliki di awal, ada kemungkinan untuk memilih jalur yang tepat ke kompiler
sumber
Ini tidak hanya bekerja dengan
cmake
, tetapi juga dengan./configure
danmake
:Yang menghasilkan:
sumber
Ubah
CMAKE_<LANG>_COMPILER
jalur tanpa memicu konfigurasi ulangSaya ingin mengkompilasi dengan kompiler alternatif, tetapi juga memberikan opsi -D pada baris perintah yang akan dihapus dengan mengatur kompiler yang berbeda. Ini terjadi karena memicu konfigurasi ulang. Triknya adalah dengan menonaktifkan deteksi kompilator dengan
NONE
, setel jalur denganFORCE
, laluenable_language
.Gunakan file Toolchain
Pilihan yang lebih masuk akal adalah membuat file toolchain.
Kemudian Anda memanggil Cmake dengan bendera tambahan
sumber