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é.

65
demandé sur mustafagonul 2013-06-24 16:21:05

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 .

141
répondu Guillaume 2018-01-28 21:54:55

mettez CMAKE_C_COMPILER sur votre nouveau chemin.

voir ici: http://www.cmake.org/Wiki/CMake_Useful_Variables

6
répondu John Zwinck 2013-06-24 12:32:36

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 avec cmake -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++ .
6
répondu lambda 2018-05-23 17:21:28

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

2
répondu R.Chatsiri 2016-01-25 08:02:27

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

2
répondu Antonio 2016-09-05 12:13:12