Mon système d'exploitation est centos qui a un gcc par défaut dans le chemin /usr/bin/gcc
. Mais c'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 je cours cmake
, il utilise toujours l'ancienne version gcc path ( /usr/bin/gcc
). Comment puis-je spécifier le gcc dans le nouveau chemin ( /usr/local/bin/gcc
).
J'ai essayé d'écraser /usr/bin/gcc
avec /usr/local/bin/gcc
, mais cela ne fonctionne pas.
/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.Réponses:
Ne pas écraser
CMAKE_C_COMPILER
, mais exporterCC
(etCXX
) avant d'appeler cmake: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 JakeJe 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:Voyons ce qui se passe pour les trois appels possibles à
set
:Sans cache
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
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
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
etranlib
. 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
.la source
which gcc
> export CXX =which g++
export CC=`which gcc` export CXX=`which g++`
Incorrect 'gcc' version 'compiler.version=5.3' is not the one detected by CMake: 'GNU=4.8'
CMAKE_C_COMPILER
fonctionne bien à condition que vous le faites en utilisant la ligne de commande:$ cmake -GNinja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ /path/to/source
.Cette question est assez ancienne mais apparaît toujours dans la recherche Google. La question acceptée ne fonctionnait plus pour moi et semble avoir vieilli. Les dernières informations sur cmake sont écrites dans la FAQ cmake .
Il existe différentes manières de modifier le chemin de votre compilateur. Une façon serait
au lieu de
gcc-4.2
toi, tu peux écrirepath/to/your/compiler
comme çala source
Choisissez
CMAKE_C_COMPILER
votre nouveau chemin.Voir ici: http://www.cmake.org/Wiki/CMake_Useful_Variables
la source
L'exportation doit être spécifique sur la version de GCC / G ++ à utiliser, car si l'utilisateur avait plusieurs versions de compilateur, il ne se compilerait pas correctement.
Dans le cas où le projet utilise C ++ 11, cela peut être géré en utilisant l'
-std=C++-11
indicateur dans CMakeList.txtla source
Une solution alternative consiste à configurer votre projet via cmake-gui, à partir d'un répertoire de construction propre. Parmi les options dont vous disposez au début, il y a la possibilité de choisir le chemin exact vers les compilateurs
la source
Cela fonctionne non seulement avec
cmake
, mais aussi avec./configure
etmake
:Ce qui entraîne:
la source
Changer de
CMAKE_<LANG>_COMPILER
chemin sans déclencher une reconfigurationJe voulais compiler avec un compilateur alternatif, mais aussi passer les options -D sur la ligne de commande qui seraient effacées en définissant un compilateur différent. Cela se produit car il déclenche une reconfiguration. L'astuce consiste à désactiver la détection du compilateur avec
NONE
, à définir les chemins avecFORCE
, puisenable_language
.Utiliser un fichier Toolchain
Le choix le plus judicieux consiste à créer un fichier de chaîne d'outils.
Ensuite, vous invoquez Cmake avec un indicateur supplémentaire
la source