it-swarm.com.de

So geben Sie einen neuen GCC-Pfad für CMake an

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 cmake starte, wird immer noch der alte gcc-Pfad (/usr/bin/gcc) Verwendet. Wie kann ich den gcc zum neuen Pfad angeben (/usr/local/bin/gcc).

Ich habe versucht, /usr/bin/gcc Mit /usr/local/bin/gcc Zu überschreiben, aber es funktioniert nicht.

95
tidy

Überschreiben Sie nicht CMAKE_C_COMPILER, Sondern exportieren Sie CC (und CXX), bevor Sie cmake aufrufen:

export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++
cmake /path/to/your/project
make

Der Export muss nur einmal ausgeführt werden. Wenn Sie das Projekt zum ersten Mal konfigurieren, werden diese Werte aus dem CMake-Cache gelesen.


UPDATE : längere Erklärung, warum man CMAKE_C(XX)_COMPILER nicht nach Jakes Kommentar überschreibt

Ich empfehle, den CMAKE_C(XX)_COMPILER -Wert aus zwei Hauptgründen nicht zu überschreiben: weil er nicht gut mit dem Cache von CMake zusammenarbeitet und weil er die Compilerprüfungen und die Tool-Erkennung bricht.

Bei Verwendung des Befehls set haben Sie drei Möglichkeiten:

  • ohne Cache, um eine normale Variable zu erstellen
  • mit Cache, um eine zwischengespeicherte Variable zu erstellen
  • zwischenspeicher erzwingen, um bei der Konfiguration immer den Zwischenspeicherwert zu erzwingen

Mal sehen, was bei den drei möglichen Aufrufen von set passiert:

Ohne Cache

set(CMAKE_C_COMPILER /usr/bin/clang)
set(CMAKE_CXX_COMPILER /usr/bin/clang++)

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 zuweisen können. Dies ist ein Problem, wenn Sie mehrere Build-Umgebungen mit unterschiedlichen Compilern haben. Sie können Ihr Skript auch jedes Mal aktualisieren, wenn Sie einen anderen Compiler verwenden möchten. Dadurch wird jedoch der Wert der Verwendung von CMake zunichte gemacht.

Ok, dann aktualisieren wir den Cache ...

Mit Cache

set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "")
set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "")

Diese Version wird einfach "nicht funktionieren". Die Variable CMAKE_C(XX)_COMPILER befindet sich bereits im Cache. Sie wird daher nur aktualisiert, wenn Sie sie erzwingen.

Ah ... lass uns die Kraft anwenden, dann ...

Cache erzwingen

set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "" FORCE)
set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "" FORCE)

Dies ist fast das Gleiche wie die "normale" variable Version. Der einzige Unterschied besteht darin, dass Ihr Wert im Cache festgelegt wird, damit Benutzer ihn sehen können. Jede Änderung wird jedoch durch den Befehl set überschrieben.

Breaking Compiler Checks und Tooling

Zu Beginn des Konfigurationsprozesses führt CMake Überprüfungen des Compilers durch: Funktioniert das? Kann es ausführbare Dateien erstellen? usw. Der Compiler erkennt auch verwandte Tools wie ar und ranlib. Wenn Sie den Compiler-Wert in einem Skript überschreiben, ist es "zu spät", alle Überprüfungen und Erkennungen sind bereits durchgeführt.

Beispielsweise wird auf meinem Computer mit gcc als Standard-Compiler, wenn der Befehl set für /usr/bin/clang Verwendet wird, ar auf /usr/bin/gcc-ar-7 Gesetzt. Wenn Sie einen Export verwenden, bevor Sie CMake ausführen, wird dieser auf /usr/lib/llvm-3.8/bin/llvm-ar Gesetzt.

180
Guillaume

Diese Frage ist ziemlich alt, taucht aber immer noch in der Google-Suche auf. Die akzeptierte Frage hat bei mir nicht mehr funktioniert und scheint in die Jahre gekommen zu sein. Die neuesten Informationen zu cmake finden Sie in der cmake FAQ .

Es gibt verschiedene Möglichkeiten, den Pfad Ihres Compilers zu ändern. Ein Weg wäre

Setzen Sie die entsprechende (n) Variable (n) CMAKE_FOO_COMPILER Mit cmake -D Auf einen gültigen Compilernamen oder vollständigen Pfad in der Befehlszeile. Beispielsweise:

cmake -G "Your Generator" -D CMAKE_C_COMPILER=gcc-4.2 -D CMAKE_CXX_COMPILER=g++-4.2 path/to/your/source

anstelle von gcc-4.2 können Sie auch so den path/to/your/compiler schreiben

 cmake -D CMAKE_C_COMPILER=/path/to/gcc/bin/gcc -D CMAKE_CXX_COMPILER=/path/to/gcc/bin/g++ .
17
lambda

Einstellen CMAKE_C_COMPILER zu deinem neuen Pfad.

Siehe hier: http://www.cmake.org/Wiki/CMake_Useful_Variables

6
John Zwinck

Beim Export sollte genau festgelegt werden, welche Version von GCC/G ++ verwendet werden soll, da bei Verwendung mehrerer Compilerversionen keine erfolgreiche Kompilierung möglich ist.

 export CC=path_of_gcc/gcc-version
 export CXX=path_of_g++/g++-version
 cmake  path_of_project_contain_CMakeList.txt
 make 

Falls das Projekt C++ 11 verwendet, kann dies mit dem Flag -std=C++-11 In CMakeList.txt erledigt werden

3
R.Chatsiri

Eine alternative Lösung besteht darin, Ihr Projekt über cmake-gui ausgehend von einem sauberen Erstellungsverzeichnis zu konfigurieren. Unter den Optionen, die Ihnen zu Beginn zur Verfügung stehen, besteht die Möglichkeit, den genauen Pfad zu den Compilern zu wählen

2
Antonio