Come impostare gcc 4.8 come compilatore gcc predefinito

23

Recentemente ho installato gcc 4.8 utilizzando brew su OSX 10.7.5 (Lion) . Ora posso compilare usando gcc 4.8 usando

g++-4.8 some_file.c

o utilizzando il gcc 4.2 predefinito utilizzando

g++ some_file.c

Voglio usare gcc 4.8 come compilatore predefinito per Xcode e se scrivo gcc sul terminale. Suppongo che devo modificare gcc-related link all'interno di dirname $(which gcc) .

Quando faccio

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

ottengo il seguente:

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

Quando corro: which gcc-4.8 Ottengo /usr/local/bin/gcc-4.8 .

I passaggi per ottenere questo risultato sarebbero molto utili.

Per favore e grazie.

    
posta quine 16.08.2013 - 06:11
fonte

5 risposte

16

Grazie a tutti voi per il vostro aiuto. Ho finito per creare alias solo in ~/.bash_profile come segue:

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

La risposta di Lynken è molto utile, ma l'ho adattata con alias in quanto è più facile per me annullare se necessario.

Specificamente, se PATH è impostato in modo che /usr/local/bin (dove brew mette il link a gcc 4.8 ) appaia prima appare /usr/bin (dove gcc è collegato per impostazione predefinita), quindi creando collegamenti come suggerito da Lyken in /usr/local/bin dovrebbe teoricamente funzionare per me. In pratica, non per qualche ragione: il fallimento di un errore del linker e degli alias aggirano l'errore senza che sia necessario risolvere il problema.

L'altro vantaggio degli alias è che non ho bisogno di collegare quello che voglio gestire in homebrew e di non dover competere con quello strumento per cui la versione di gcc è collegata in /usr/local

    
risposta data 16.08.2013 - 21:44
fonte
17

Supponendo che stai usando bash (è l'impostazione predefinita), puoi aggiungere / usr / local / bin come priorità assoluta in PATH in questo modo:

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

Questo assicurerà che / usr / local / bin sia controllato prima di tutte le altre aree del tuo percorso. Quindi avvia una nuova sessione di terminale per caricare la nuova variabile.

Un altro modo per farlo:

  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++
    
risposta data 16.08.2013 - 06:27
fonte
10

Uso in 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

e torna a 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

o mettilo nel file e poi: source <file>

    
risposta data 12.02.2014 - 04:38
fonte
1

Supponiamo che l'effettiva inizializzazione della shell avvenga tramite ~/.profile , quindi dovrai modificarla in modo da mettere /usr/local/bin in vantaggio rispetto a qualsiasi altro componente PATH dove gcc e tutti i suoi binari associati sono.

Ecco il modo di eseguire questa modifica pulita:

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

Attenzione: se ~/.profile è già strutturato, questo script di shell dovrà essere regolato manualmente per adattarsi alla definizione PATH corretta nel posto giusto.

    
risposta data 16.08.2013 - 09:57
fonte
0

Si presume che l'alias di creazione o il collegamento a file binari di gcc diversi facciano in modo che usino la propria inclusione prima della cartella di sistema predefinita.

    
risposta data 11.01.2015 - 17:34
fonte

Leggi altre domande sui tag