Ne pas écraser CMAKE_C_COMPILER
, mais exporter CC
(et CXX
) avant d'appeler cmake:
export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++
cmake /path/to/your/project
make
L'exportation ne doit être effectuée qu'une seule fois, la première fois que vous configurez le projet, ces valeurs seront lues à partir du cache CMake.
MISE À JOUR : explication plus longue sur pourquoi ne pas passer outre CMAKE_C(XX)_COMPILER
après le commentaire de Jake
Je recommande de ne pas remplacer la CMAKE_C(XX)_COMPILER
valeur pour deux raisons principales: parce qu'elle ne fonctionnera pas bien avec le cache de CMake et parce qu'elle rompt les vérifications du compilateur et la détection des outils.
Lorsque vous utilisez la set
commande, vous avez trois options:
- sans cache, pour créer une variable normale
- avec cache, pour créer une variable mise en cache
- forcer le cache, pour toujours forcer la valeur du cache lors de la configuration
Voyons ce qui se passe pour les trois appels possibles à set
:
Sans cache
set(CMAKE_C_COMPILER /usr/bin/clang)
set(CMAKE_CXX_COMPILER /usr/bin/clang++)
En faisant cela, vous créez une variable "normale" CMAKE_C(XX)_COMPILER
qui cache la variable de cache du même nom. Cela signifie que votre compilateur est maintenant codé en dur dans votre script de construction et que vous ne pouvez pas lui donner de valeur personnalisée. Ce sera un problème si vous avez plusieurs environnements de construction avec différents compilateurs. Vous pouvez simplement mettre à jour votre script chaque fois que vous souhaitez utiliser un compilateur différent, mais cela supprime la valeur de l'utilisation de CMake en premier lieu.
Ok, alors mettons à jour le cache ...
Avec cache
set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "")
set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "")
Cette version "ne fonctionnera pas". La CMAKE_C(XX)_COMPILER
variable est déjà dans le cache, elle ne sera donc mise à jour que si vous la forcez.
Ah ... utilisons la force, alors ...
Forcer le cache
set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "" FORCE)
set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "" FORCE)
C'est presque la même chose que la version de variable "normale", la seule différence est que votre valeur sera définie dans le cache, afin que les utilisateurs puissent la voir. Mais tout changement sera écrasé par la set
commande.
Rompre les vérifications et les outils du compilateur
Au début du processus de configuration, CMake effectue des vérifications sur le compilateur: fonctionne-t-il? Est-il capable de produire des exécutables? etc. Il utilise également le compilateur pour détecter les outils associés, comme ar
et ranlib
. Lorsque vous remplacez la valeur du compilateur dans un script, il est "trop tard", toutes les vérifications et détections sont déjà effectuées.
Par exemple, sur ma machine avec gcc comme compilateur par défaut, lorsque vous utilisez la set
commande to /usr/bin/clang
, ar
est défini sur /usr/bin/gcc-ar-7
. Lorsque vous utilisez une exportation avant d'exécuter CMake, il est défini sur /usr/lib/llvm-3.8/bin/llvm-ar
.
/opt
plutôt que/usr/local
. De préférence/opt/gcc-x.y.z
. De cette façon, si vous avez besoin d'une version encore plus récente, vous n'aurez aucun problème à désinstaller la précédente.