Cómo configurar gcc 4.8 como el compilador gcc predeterminado

23

Recientemente instalé gcc 4.8 usando brew en OSX 10.7.5 (Lion) . Ahora puedo compilar usando gcc 4.8 usando

g++-4.8 some_file.c

o usando el gcc 4.2 predeterminado usando

g++ some_file.c

Quiero usar gcc 4.8 como el compilador predeterminado para Xcode y si escribo gcc en el terminal. Supongo que debo modificar los enlaces gcc-related dentro de dirname $(which gcc) .

Cuando lo haga

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

Me sale lo siguiente:

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

Cuando ejecuto: which gcc-4.8 obtengo /usr/local/bin/gcc-4.8 .

Los pasos para hacer esto serían muy útiles.

Por favor y gracias.

    
pregunta quine 16.08.2013 - 06:11

5 respuestas

16

Gracias a todos por su ayuda. Terminé simplemente creando alias dentro de ~/.bash_profile de la siguiente manera:

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

La respuesta de Lynken es muy útil, pero la adapté con alias, ya que es más fácil de deshacer si es necesario.

Específicamente, si PATH se establece de manera tal que /usr/local/bin (donde brew pone el enlace en gcc 4.8 ) aparece antes que aparezca /usr/bin (donde gcc está vinculado por defecto), luego se crean enlaces como Lyken sugirió dentro de /usr/local/bin debería en teoría funcionar para mí. En la práctica, no lo hace por alguna razón: fallar con un error de vinculador y los alias funcionan en torno a ese error sin que yo tenga que resolver ese problema, también.

El otro beneficio de los alias es que no tengo que vincular lo que quiero que Homebrew maneje y no tengo que competir con esa herramienta por la cual la versión de gcc está vinculada en /usr/local

    
respondido por el quine 16.08.2013 - 21:44
17

Suponiendo que estás usando bash (es el valor predeterminado), entonces puedes agregar / usr / local / bin como tu principal prioridad en PATH de esta manera:

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

Esto asegurará que / usr / local / bin esté marcado antes de todas las otras áreas de su ruta. Luego simplemente inicie una nueva sesión de terminal para cargar la nueva variable.

Otra forma de hacer esto:

  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++
    
respondido por el Digitalchild 16.08.2013 - 06:27
10

Yo uso para 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

y de vuelta 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 póngalo en el archivo y luego: source <file>

    
respondido por el ydk2 12.02.2014 - 04:38
1

Supongamos que su inicialización de shell real se realiza a través de ~/.profile , entonces tendrá que modificarla para poner /usr/local/bin por delante de cualquier otro componente PATH donde gcc y todos sus binarios asociados estén.

Esta es la forma de realizar esta modificación limpia:

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

Cuidado: si su ~/.profile ya está estructurado, este script de shell tendrá que ajustarse manualmente para que se ajuste a la definición correcta de PATH en el lugar correcto.

    
respondido por el daniel Azuelos 16.08.2013 - 09:57
0

Se supone que el alias de creación o el enlace a diferentes binarios gcc hará que utilicen su propia inclusión antes de la carpeta de inclusión del sistema predeterminado.

    
respondido por el Dragonborn 11.01.2015 - 17:34

Lea otras preguntas en las etiquetas