Nicht überschreiben CMAKE_C_COMPILER
, sondern exportieren CC
(und CXX
), bevor cmake aufgerufen wird:
export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++
cmake /path/to/your/project
make
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 überschreibenCMAKE_C(XX)_COMPILER
nach Jakes Kommentar
Ich 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:
- ohne Cache, um eine normale Variable zu erstellen
- mit Cache, um eine zwischengespeicherte Variable zu erstellen
- Cache erzwingen, um beim Konfigurieren immer den Cache-Wert zu erzwingen
Mal sehen, was bei den drei möglichen Anrufen passiert set
:
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 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
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 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
set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "" FORCE)
set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "" FORCE)
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 erkennen ranlib
. 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
.
/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.