Comment spécifier un nouveau chemin GCC pour CMake
mon OS est centos qui a un gcc par défaut dans le chemin /usr/bin/gcc
. Mais il est vieux, j'ai besoin d'une nouvelle version de gcc. J'installe donc une nouvelle version dans un nouveau chemin /usr/local/bin/gcc
.
mais quand j'exécute cmake
, il utilise toujours l'ancienne version du chemin gcc ( /usr/bin/gcc
). Comment puis-je spécifier le gcc à nouveau chemin( /usr/local/bin/gcc
).
j'ai essayé de remplacer /usr/bin/gcc
par /usr/local/bin/gcc
, mais cela n'a pas fonctionné.
5 réponses
ne pas remplacer 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, alors ces valeurs seront lues à partir du cache CMake.
mise à jour : explication plus longue sur pourquoi ne pas remplacer CMAKE_C(XX)_COMPILER
après le commentaire de Jake
I déconseillez d'outrepasser la valeur CMAKE_C(XX)_COMPILER
pour deux raisons principales: parce qu'elle ne fonctionnera pas bien avec le cache de CMake et parce qu'elle casse les vérifications du compilateur et la détection d'outils.
lorsque vous utilisez la commande set
, 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 le cache valeur lors de la configuration de
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 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 donner une 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 voulez 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 tout simplement pas. La variable CMAKE_C(XX)_COMPILER
est déjà dans le cache, donc elle ne sera pas mise à jour à moins que vous il force.
Ah... nous allons utiliser la force, alors...
"1519280920 Force de" 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 variable" normale", la seule différence est que votre valeur sera définie dans le cache, donc les utilisateurs peuvent la voir. Mais tout changement sera écrasé par la commande set
.
Casser compilateur vérifie et de l'outillage
au début du processus de configuration, CMake effectue des vérifications sur le compilateur: cela fonctionne-t-il? Est-il capable de produire des exécutables? etc. Il utilise également le compilateur pour détecter les outils connexes, comme ar
et ranlib
. Lorsque vous outrepassez la valeur du compilateur dans un script, c'est "trop tard", toutes les vérifications et détections sont déjà faites.
par exemple, sur ma machine avec gcc comme compilateur par défaut, en utilisant la commande set
to /usr/bin/clang
, ar
est fixé à /usr/bin/gcc-ar-7
. Lorsque vous utilisez une exportation avant D'exécuter CMake, elle est définie à /usr/lib/llvm-3.8/bin/llvm-ar
.
cette question est assez ancienne mais apparaît toujours sur Google Search. La question acceptée ne marchait plus pour moi et semble vieillir. Les dernières informations sur cmake sont écrites dans la FAQ cmake .
Là, vous pouvez trouver différentes façons de changer le chemin de votre compilateur. Une solution serait
définit la ou les variables
CMAKE_FOO_COMPILER
appropriées à un compilateur valide nom ou chemin complet sur le ligne de commande aveccmake -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 chemin/vers/votre/compilateur comme ce
cmake -D CMAKE_C_COMPILER=/path/to/gcc/bin/gcc -D CMAKE_CXX_COMPILER=/path/to/gcc/bin/g++ .
exportation devrait être spécifique sur quelle version de GCC / g++ utiliser, parce que si l'utilisateur avait la version de compilateur multiple, il ne compilerait pas avec succès.
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 de projet Utiliser C++11 cela peut être manipulé en utilisant -std=C++-11
drapeau dans CMakeList.txt
une solution alternative est de 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