So legen Sie gcc 4.8 als Standard-gcc-Compiler fest

Ich habe kürzlich gcc 4.8mit brewon installiert OSX 10.7.5 (Lion). Ich kann jetzt mit Hilfe gcc 4.8von Verwendung kompilieren

g++-4.8 some_file.c

oder verwenden Sie die Standardeinstellung gcc 4.2, indem Sie verwenden

g++ some_file.c

Ich möchte gcc 4.8als Standard-Compiler für Xcodeund verwenden, wenn ich gccam Terminal tippe. Ich nehme an, ich muss gcc-relatedLinks innerhalb ändern dirname $(which gcc).

Wenn ich es tue

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

Ich bekomme folgendes:

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

Wenn ich laufe: which gcc-4.8bekomme ich /usr/local/bin/gcc-4.8.

Schritte, um dies zu erreichen, wären sehr hilfreich.

Bitte und Dankeschön.

Antworten (5)

Angenommen, Sie verwenden bash (dies ist die Standardeinstellung), können Sie /usr/local/bin wie folgt als oberste Priorität in PATH hinzufügen:

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

Dadurch wird sichergestellt, dass /usr/local/bin vor allen anderen Bereichen Ihres Pfads überprüft wird. Starten Sie dann einfach eine neue Terminalsitzung, um die neue Variable zu laden.

Eine andere Möglichkeit, dies zu tun:

  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++
Wenn Sie die symbolischen Links ersetzen möchten, müssen Sie für Benutzer von Mac OS Catalina oder höher diese Schritte ausführen, bevor Sie sie ersetzen, und Sie müssen sudo rm -rfnicht nur rmund sudo lnnicht einfachln
Endlich gelingt das. Ich musste auch csrutil disableim Neustartmodus auf dem Mac laufen.

Danke an euch alle für eure Hilfe. Am Ende habe ich nur Aliase ~/.bash_profilewie folgt erstellt:

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

Die Antwort von Lynken ist sehr hilfreich, aber ich habe sie mit Aliasnamen angepasst, da ich das bei Bedarf einfacher rückgängig machen kann.

Insbesondere, wenn PATHso eingestellt ist, dass /usr/local/bin(wo brew den Link zu setzt gcc 4.8) ​​vor dem Erscheinen erscheint /usr/bin(wo gccstandardmäßig verlinkt wird), dann sollte das Erstellen von Links, wie von Lyken vorgeschlagen /usr/local/bin, theoretisch für mich funktionieren. In der Praxis ist dies aus irgendeinem Grund nicht der Fall – wenn ein Linker-Fehler fehlschlägt, umgehen Aliase diesen Fehler, ohne dass ich dieses Problem ebenfalls lösen muss.

Der andere Vorteil von Aliasen ist, dass ich nicht verlinken muss, was Homebrew handhaben soll, und nicht mit dem Tool konkurrieren muss, für das die Version von gcc verlinkt ist/usr/local

Ich verwende 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

und zurück zu 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

oder lege es in eine Datei und dann:source <file>

Das funktioniert nicht mehr. Wir müssen die Version an das Ende anhängen

Nehmen wir an, Ihre eigentliche Shell-Initialisierung erfolgt über ~/.profile, dann müssen Sie sie so ändern, dass sie /usr/local/binjeder anderen PATH-Komponente vorangestellt wird, in der gccsich alle zugehörigen Binärdateien befinden.

So führen Sie diese saubere Änderung durch:

CD

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

if [ "${_shell_init}" = "" ] ; dann
    # PATH ist nicht in .profile definiert
    # Installieren Sie dort die erste relative Definition von PATH
    echo 'PATH=/usr/local/bin:${PATH}
export PATH' >>.profile
    . .Profil
    ausführen ${SHELL}
anders
    # Alle Vorkommen von /usr/local/bin entfernen, wo immer sie auch sein mögen
    # in PATH setzen und vor allen anderen Komponenten einfügen
    sed -E -e '/(^| )PATH=/s,:/usr/local/bin,,' \
        -e '/(^| )PATH=/s,/usr/local/bin:,,' \
        -e '/(^| )PATH=/s,,&/usr/local/bin:,' .profile >.profile.new
    mv .profil.neues .profil
    . .Profil
    ausführen ${SHELL}
fi

Achtung: Wenn Ihr ~/.profilebereits strukturiert ist, muss dieses Shell-Skript manuell angepasst werden, um die richtige PATH-Definition an der richtigen Stelle einzufügen.

Dies ist sicherlich perfekt zum Modifizieren PATH, damit /usr/local/binman es zuerst sieht. Das wird mir in Zukunft wahrscheinlich Kopfschmerzen ersparen. Ich wünschte, ich könnte dir +1 geben. Mein Problem ist jedoch, dass gcces immer noch mit verknüpft ist gcc 4.2und nicht, gcc 4.8weil es keinen Symlink für gcc -> gcc-4.8in gibt /usr/local/bin. Ich müsste nach der Aktualisierung mit Ihrem Skript immer noch entweder einen Alias gcc​​wie gcc-4.8innerhalb ~/.profileoder einen Symlink ( ln -s gcc-4.8 gcc) verwenden. Ihr? /usr/local/binPATH
Ich bin überrascht , dass ich brewnicht die richtigen symbolischen Links hinzugefügt habe. Haben Sie diese Antwort zum gleichen Thema gelesen: apple.stackexchange.com/a/38247/22003 ?

Es wird davon ausgegangen, dass das Erstellen eines Alias ​​oder das Verknüpfen mit verschiedenen gcc-Binärdateien dazu führt, dass sie ihr eigenes Include vor dem standardmäßigen Include-Ordner des Systems verwenden.