36 votes

Comment définir gcc 4.8 comme compilateur gcc par défaut ?

J'ai récemment installé gcc 4.8 en utilisant brew sur OSX 10.7.5 (Lion) . Je peux maintenant compiler en utilisant gcc 4.8 en utilisant

g++-4.8 some_file.c

ou en utilisant l'option par défaut gcc 4.2 en utilisant

g++ some_file.c

Je veux utiliser gcc 4.8 comme compilateur par défaut pour Xcode et si je tape gcc au terminal. Je suppose que je dois modifier gcc-related liens dans dirname $(which gcc) .

Quand je le fais

ls -al $(dirname $(which gcc)) | grep 'gcc\|g++\|c++'

J'obtiens ce qui suit :

lrwxr-xr-x     1 root   wheel         7 Jul 31 12:17 c++ -> clang++
-rwxr-xr-x     1 root   wheel    909360 Nov 18  2011 c++filt
lrwxr-xr-x     1 root   wheel         5 Jul 31 12:17 clang++ -> clang
lrwxr-xr-x     1 root   wheel        12 Jul 31 12:17 g++ -> llvm-g++-4.2
lrwxr-xr-x     1 root   wheel        12 Jul 31 12:17 gcc -> llvm-gcc-4.2
lrwxr-xr-x     1 root   wheel        28 Jul 31 12:17 gcov-4.2 -> ../llvm-gcc-4.2/bin/gcov-4.2
lrwxr-xr-x     1 root   wheel        52 Jul 31 12:17 i686-apple-darwin11-llvm-g++-4.2 -> ../llvm-gcc-4.2/bin/i686-apple-darwin11-llvm-g++-4.2
lrwxr-xr-x     1 root   wheel        52 Jul 31 12:17 i686-apple-darwin11-llvm-gcc-4.2 -> ../llvm-gcc-4.2/bin/i686-apple-darwin11-llvm-gcc-4.2
lrwxr-xr-x     1 root   wheel        32 Jul 31 12:17 llvm-cpp-4.2 -> ../llvm-gcc-4.2/bin/llvm-cpp-4.2
lrwxr-xr-x     1 root   wheel        32 Jul 31 12:17 llvm-g++ -> ../llvm-gcc-4.2/bin/llvm-g++-4.2
lrwxr-xr-x     1 root   wheel        32 Jul 31 12:17 llvm-g++-4.2 -> ../llvm-gcc-4.2/bin/llvm-g++-4.2
lrwxr-xr-x     1 root   wheel        32 Jul 31 12:17 llvm-gcc -> ../llvm-gcc-4.2/bin/llvm-gcc-4.2
lrwxr-xr-x     1 root   wheel        32 Jul 31 12:17 llvm-gcc-4.2 -> ../llvm-gcc-4.2/bin/llvm-gcc-4.2

Quand je cours : which gcc-4.8 Je reçois /usr/local/bin/gcc-4.8 .

Les étapes à suivre pour y parvenir seraient très utiles.

S'il vous plaît et merci.

26voto

quine Points 733

Merci à vous tous pour votre aide. J'ai fini par créer des alias dans ~/.bash_profile comme suit :

alias gcc='gcc-4.8'
alias cc='gcc-4.8'
alias g++='g++-4.8'
alias c++='c++-4.8'

La réponse de Lynken est très utile, mais je l'ai adaptée avec des alias car c'est plus facile pour moi d'annuler si nécessaire.

Plus précisément, si PATH est défini de telle sorte que /usr/local/bin (où Brew met le lien vers gcc 4.8 ) apparaît avant apparaît /usr/bin (où gcc est lié par défaut), puis en créant des liens comme Lyken l'a suggéré au sein de /usr/local/bin devrait théoriquement fonctionner pour moi. En pratique, ce n'est pas le cas pour une raison ou une autre - il y a une erreur de liaison et les alias contournent cette erreur sans que je doive résoudre ce problème également.

L'autre avantage des alias est que je n'ai pas à lier ce que je veux que homebrew gère et que je n'ai pas à entrer en compétition avec cet outil pour savoir quelle version de gcc est liée. /usr/local

25voto

Digitalchild Points 3585

En supposant que vous utilisez bash (c'est la valeur par défaut), vous pouvez ajouter /usr/local/bin comme priorité principale dans PATH comme ceci :

echo "PATH=\"/usr/local/bin:$PATH\"" >> ~/.bash_profile

Cela garantira que /usr/local/bin est vérifié avant toutes les autres zones de votre chemin. Ensuite, il suffit de démarrer une nouvelle session de terminal pour charger la nouvelle variable.

Une autre façon de procéder :

  cd /usr/bin
  rm cc gcc c++ g++
  ln -s /usr/local/bin/gcc-4.8 cc
  ln -s /usr/local/bin/gcc-4.8 gcc
  ln -s /usr/local/bin/c++-4.8 c++
  ln -s /usr/local/bin/g++-4.8 g++

15voto

Mange Points 1

J'utilise gcc-4.8 :

export CC=/usr/local/bin/gcc

export CXX=/usr/local/bin/g++

export CPP=/usr/local/bin/cpp

export LD=/usr/local/bin/gcc

alias c++=/usr/local/bin/c++

alias g++=/usr/local/bin/g++

alias gcc=/usr/local/bin/gcc

alias cpp=/usr/local/bin/cpp

alias ld=/usr/local/bin/gcc

alias cc=/usr/local/bin/gcc

et retour à apple gcc :

export CC=/usr/bin/gcc

export CXX=/usr/bin/g++

export CPP=/usr/bin/cpp

export LD=/usr/bin/ld

alias c++=/usr/bin/c++

alias g++=/usr/bin/g++

alias gcc=/usr/bin/gcc

alias cpp=/usr/bin/cpp

alias cc=/usr/bin/gcc

alias ld=/usr/bin/ld

ou le mettre dans le dossier et ensuite : source <file>

2voto

Rich Points 2429

Supposons que l'initialisation de l'interpréteur de commandes se fasse par l'intermédiaire de ~/.profile alors vous devrez le modifier de manière à mettre /usr/local/bin avant tout autre composant de PATH où gcc et tous ses binaires associés sont.

Voici la façon d'effectuer cette modification propre :

cd

\_shell\_init=\`egrep '(^| )PATH' .profile 2>/dev/null\`

if \[ "${\_shell\_init}" = "" \] ; then
    # PATH isn't defined in .profile
    # install there the first relative definition of PATH
    echo 'PATH=/usr/local/bin:${PATH}
export PATH' >>.profile
    . .profile
    exec ${SHELL}
else
    # remove all occurences of /usr/local/bin wherever they might be
    # set into PATH, and insert it ahead of all other components
    sed -E -e '/(^| )PATH=/s,:/usr/local/bin,,' \\
        -e '/(^| )PATH=/s,/usr/local/bin:,,' \\
        -e '/(^| )PATH=/s,,&/usr/local/bin:,' .profile >.profile.new
    mv .profile.new .profile
    . .profile
    exec ${SHELL}
fi

Attention : si votre ~/.profile est déjà structuré, ce shell script devra être réglé manuellement pour s'adapter à la bonne définition de PATH au bon endroit.

-1voto

Dragonborn Points 101

Il est supposé que la création d'un alias ou l'établissement d'un lien avec des binaires gcc différents leur fera utiliser leur propre include avant le dossier include du système par défaut.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X