Mein Betriebssystem ist centos mit einem Standard-gcc im Pfad /usr/bin/gcc
. Aber es ist alt, ich brauche eine neue Version von gcc. Also installiere ich eine neue Version in einem neuen Pfad/usr/local/bin/gcc
.
Aber wenn ich laufe cmake
, verwendet es immer noch die alte Version gcc path ( /usr/bin/gcc
). Wie kann ich den gcc für einen neuen Pfad angeben (/usr/local/bin/gcc
)
Ich habe versucht, /usr/bin/gcc
mit zu überschreiben /usr/local/bin/gcc
, aber es funktioniert nicht.
/opt
anstatt zu installieren/usr/local
. Vorzugsweise/opt/gcc-x.y.z
. Auf diese Weise können Sie die vorherige Version problemlos deinstallieren, wenn Sie eine noch neuere Version benötigen.Antworten:
Nicht überschreiben
CMAKE_C_COMPILER
, sondern exportierenCC
(undCXX
), bevor cmake aufgerufen wird:Der Export muss nur einmal durchgeführt werden. Wenn Sie das Projekt zum ersten Mal konfigurieren, werden diese Werte aus dem CMake-Cache gelesen.
UPDATE : längere Erklärung, warum nicht überschreiben
CMAKE_C(XX)_COMPILER
nach Jakes KommentarIch empfehle gegen das Überschreiben der
CMAKE_C(XX)_COMPILER
Wert aus zwei Hauptgründen nicht zu : weil er nicht gut mit dem CMake-Cache funktioniert und weil er die Compilerprüfungen und die Tool-Erkennung unterbricht.Bei Verwendung des
set
Befehls haben Sie drei Möglichkeiten:Mal sehen, was bei den drei möglichen Anrufen passiert
set
:Ohne Cache
Dabei erstellen Sie eine "normale" Variable
CMAKE_C(XX)_COMPILER
, die die gleichnamige Cache-Variable verbirgt. Das bedeutet, dass Ihr Compiler jetzt in Ihrem Build-Skript fest codiert ist und Sie ihm keinen benutzerdefinierten Wert geben können. Dies ist ein Problem, wenn Sie mehrere Build-Umgebungen mit unterschiedlichen Compilern haben. Sie können Ihr Skript einfach jedes Mal aktualisieren, wenn Sie einen anderen Compiler verwenden möchten. Dadurch wird jedoch der Wert der erstmaligen Verwendung von CMake aufgehoben.Ok, dann aktualisieren wir den Cache ...
Mit Cache
Diese Version wird einfach "nicht funktionieren". Die
CMAKE_C(XX)_COMPILER
Variable befindet sich bereits im Cache und wird daher nur aktualisiert, wenn Sie sie erzwingen.Ah ... lass uns die Kraft einsetzen, dann ...
Cache erzwingen
Dies entspricht fast der "normalen" Variablenversion. Der einzige Unterschied besteht darin, dass Ihr Wert im Cache festgelegt wird, damit Benutzer ihn sehen können. Jede Änderung wird jedoch durch den
set
Befehl überschrieben .Compilerprüfungen und Werkzeuge brechen
Zu Beginn des Konfigurationsprozesses überprüft CMake den Compiler: Funktioniert das? Kann es ausführbare Dateien erstellen? usw. Es verwendet auch den Compiler, um verwandte Tools wie
ar
und zu erkennenranlib
. Wenn Sie den Compilerwert in einem Skript überschreiben, ist es "zu spät", alle Überprüfungen und Erkennungen sind bereits durchgeführt.Zum Beispiel auf meinem Rechner mit gcc als Standard - Compiler, wenn die Verwendung von
set
Befehl/usr/bin/clang
,ar
wird auf/usr/bin/gcc-ar-7
. Wenn Sie einen Export verwenden, bevor Sie CMake ausführen, wird dieser auf gesetzt/usr/lib/llvm-3.8/bin/llvm-ar
.quelle
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
funktioniert die Einstellung gut, vorausgesetzt, Sie verwenden die Befehlszeile :$ cmake -GNinja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ /path/to/source
.Diese Frage ist ziemlich alt, taucht aber immer noch in der Google-Suche auf. Die akzeptierte Frage funktionierte bei mir nicht mehr und scheint gealtert zu sein. Die neuesten Informationen zu cmake finden Sie in den häufig gestellten Fragen zu cmake .
Es gibt verschiedene Möglichkeiten, den Pfad Ihres Compilers zu ändern. Ein Weg wäre
statt
gcc-4.2
Sie können die schreiben ,path/to/your/compiler
wie diesequelle
Stellen Sie
CMAKE_C_COMPILER
Ihren neuen Pfad ein.Siehe hier: http://www.cmake.org/Wiki/CMake_Useful_Variables
quelle
Der Export sollte spezifisch sein, welche Version von GCC / G ++ verwendet werden soll, da ein Benutzer mit mehreren Compilern nicht erfolgreich kompiliert werden kann.
-std=C++-11
Wenn das Projekt C ++ 11 verwendet, kann dies mithilfe des Flags in CMakeList.txt behandelt werdenquelle
Eine alternative Lösung besteht darin, Ihr Projekt über cmake-gui zu konfigurieren, beginnend mit einem sauberen Build-Verzeichnis. Unter den Optionen, die Sie zu Beginn zur Verfügung haben, besteht die Möglichkeit, den genauen Pfad zu den Compilern zu wählen
quelle
Dies funktioniert nicht nur mit
cmake
, sondern auch mit./configure
undmake
:Was dazu führt:
quelle
Veränderung
CMAKE_<LANG>_COMPILER
Pfad, ohne eine Neukonfiguration auszulösenIch wollte mit einem alternativen Compiler kompilieren, aber auch -D-Optionen in der Befehlszeile übergeben, die durch das Festlegen eines anderen Compilers gelöscht würden. Dies geschieht, weil eine Neukonfiguration ausgelöst wird. Der Trick besteht darin, die Compilererkennung mit zu deaktivieren
NONE
, die Pfade mit festzulegenFORCE
und dannenable_language
.Verwenden Sie eine Toolchain-Datei
Die sinnvollere Wahl ist das Erstellen einer Toolchain-Datei.
Dann rufen Sie Cmake mit einem zusätzlichen Flag auf
quelle