Mon système d'exploitation est centos qui a un gcc par défaut dans le chemin /usr/bin/gcc
. Mais il est vieux, il me faut une nouvelle version de gcc. J'installe donc une nouvelle version dans un nouveau chemin /usr/local/bin/gcc
.
Mais lorsque je lance cmake
, il utilise toujours l'ancien chemin de la version gcc (/usr/bin/gcc
). Comment puis-je spécifier le gcc au nouveau chemin (/usr/local/bin/gcc
).
J'ai essayé d'écraser /usr/bin/gcc
avec /usr/local/bin/gcc
, mais cela ne fonctionne pas.
N'écrasez pas CMAKE_C_COMPILER
, mais exportez 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 fois, la première fois que vous configurez le projet, puis ces valeurs seront lues à partir du cache CMake.
UPDATE: plus d'explications sur pourquoi ne pas écraser CMAKE_C(XX)_COMPILER
après le commentaire de Jake
Je recommande de ne pas écraser la valeur CMAKE_C(XX)_COMPILER
pour deux raisons principales: parce que cela ne fonctionne pas bien avec le cache de CMake et parce qu'il interrompt les vérifications du compilateur et la détection des outils.
Lorsque vous utilisez la commande set
, vous avez trois options:
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++)
Ce faisant, vous créez une variable "normale" CMAKE_C(XX)_COMPILER
qui masque la variable de cache du même nom. Cela signifie que votre compilateur est maintenant codé en dur dans votre script de construction et vous ne pouvez pas lui attribuer 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 d'utiliser 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 va juste "ne pas fonctionner". La variable CMAKE_C(XX)_COMPILER
est déjà dans le cache, elle ne sera donc mise à jour que si vous la forcez.
Ah ... utilisons la force, alors ...
Cache forcé
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 commande set
.
Casser les vérifications du compilateur et l'outillage
Au début du processus de configuration, CMake effectue des contrôles sur le compilateur: ça fonctionne? Est-il capable de produire des exécutables? etc. Il utilise également le compilateur pour détecter les outils associés, tels que ar
et ranlib
. Lorsque vous écrasez la valeur du compilateur dans un script, il est "trop tard", toutes les vérifications et les détections sont déjà effectuées.
Par exemple, sur ma machine avec gcc comme compilateur par défaut, lors de l'utilisation de la commande set
pour /usr/bin/clang
, ar
est défini sur /usr/bin/gcc-ar-7
. Lorsque vous utilisez une exportation avant d'exécuter CMake, celle-ci est définie sur /usr/lib/llvm-3.8/bin/llvm-ar
.
Cette question est assez ancienne mais reste sur Google Search. La question acceptée ne fonctionnait plus pour moi et semble être âgée. Les dernières informations sur cmake sont écrites dans le FAQ de cmake .
Il existe différentes manières de changer le chemin de votre compilateur. Une façon serait
Définissez la ou les variables
CMAKE_FOO_COMPILER
appropriées sur un nom de compilateur valide ou un chemin complet sur la ligne de commande à l'aide decmake -D
. Par exemple:cmake -G "Your Generator" -D CMAKE_C_COMPILER=gcc-4.2 -D CMAKE_CXX_COMPILER=g++-4.2 path/to/your/source
au lieu de gcc-4.2
, vous pouvez écrire le path/to/your/compiler
comme ceci
cmake -D CMAKE_C_COMPILER=/path/to/gcc/bin/gcc -D CMAKE_CXX_COMPILER=/path/to/gcc/bin/g++ .
Définissez CMAKE_C_COMPILER
sur votre nouveau chemin.
L'exportation doit spécifier la version de GCC/G ++ à utiliser, car si l'utilisateur dispose de plusieurs versions du compilateur, la compilation sera impossible.
export CC=path_of_gcc/gcc-version
export CXX=path_of_g++/g++-version
cmake path_of_project_contain_CMakeList.txt
make
Dans le cas où le projet utilise C++ 11, ceci peut être géré à l'aide de l'indicateur -std=C++-11
dans CMakeList.txt.
Une autre solution consiste à configurer votre projet via cmake-gui, à partir d'un répertoire de construction propre. Parmi les options disponibles au début, il y a la possibilité de choisir le chemin exact vers les compilateurs