gcc 4.8을 기본 gcc 컴파일러로 설정하는 방법


27

최근에를 gcc 4.8사용하여 설치 brew했습니다 OSX 10.7.5 (Lion). 지금 사용하여 컴파일 할 수 있습니다 gcc 4.8사용하여

g++-4.8 some_file.c

또는 사용하여 기본값 gcc 4.2을 사용하여

g++ some_file.c

터미널에 입력하는 경우 gcc 4.8기본 컴파일러 로 사용하고 싶습니다 . 내 링크 를 변경해야한다고 가정합니다 .Xcodegccgcc-relateddirname $(which gcc)

내가 할 때

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

나는 다음을 얻는다 :

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

내가 실행할 때 : which gcc-4.8나는 얻는다 /usr/local/bin/gcc-4.8.

이 작업을 수행하는 단계는 매우 유용합니다.

감사합니다


1
우수한 llvm clang을 사용하지 않는 이유는 무엇입니까?
Max Ried

구체적으로는 아닙니다. 바닐라 gcc와 비교하여 llvm clang의 이점은 무엇입니까?
quine

3
더 빠르지 만 의미있는 경고도 제공하지만 gcc에는 완전히 중요한 기능이 없습니다.
Max Ried

내가 참조. 가 clang 3.3은 동일합니다 gcc 4.8? 나도 할 수 있다고 믿습니다 brew install.
quine

물어 첫 번째 질문은 당신이보다는 엑스 코드와 함께 제공되는 그 소리를 사용할 수없는 이유를 재 연타입니다 GCC-4.8 - 우리는 일하는 것이 clang3.3의 대답 할 수
user151019

답변:


20

bash (기본값)를 사용한다고 가정하면 다음과 같이 PATH에서 / usr / local / bin을 최우선 순위로 추가 할 수 있습니다.

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

이렇게하면 경로의 다른 모든 영역보다 먼저 / usr / local / bin이 확인됩니다. 그런 다음 새 터미널 세션을 시작하여 새 변수를로드하십시오.

이를 수행하는 다른 방법 :

  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++

내 생각 경로에 이미 포함되어 있습니다 usr/local/bin. echo $PATH공개 : / opt / local / bin : / opt / local / sbin : / opt / local / include : / usr / local / mysql / bin : / usr / bin / bjam : / usr / bin : / bin : / usr / sbin에 : 경우 / sbin : / usr / 지방 / 빈 :는 / usr / X11 / 빈 : / usr / 지방 /의 이동 / 빈 :는 / usr / texbin
quine

추가 옵션
Digitalchild

1
예. 포함되어 있지만 / usr / bin 이후이므로 먼저 읽지 않습니다. PATH는 순차적입니다.
Digitalchild

1
두 가지 옵션이 모두 효과가없는 것 같습니다. 나는 효과가 없었던 /usr/local/bin1 위로 이동 하여 여전히을보고 PATH호출 gccgcc 4.2보았습니다. 그러면 수동으로 심볼릭 링크를 만들었지 만 새 터미널 창을 g++열거 나 ( cc|c++|gcc)를 모두 찾을 수 없습니다. 이상한. 도와 주셔서 감사합니다
Quiine

3
/usr/bin다음 Unix 버전 ☺의 새 버전의 소스를 다루는 전문가가 아닌 이상 Unix (MacOS X 인 경우) 내에서 게임하는 것은 좋지 않습니다 .
dan

19

도와 주셔서 감사합니다. ~/.bash_profile다음과 같이 별칭을 만들었습니다 .

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

Lynken의 답변은 매우 유용하지만 필요한 경우 취소하기 쉽기 때문에 별칭으로 조정했습니다.

특히, 경우이 PATH되도록 설정한다 /usr/local/bin(양조 풋 링크에 어디 gcc 4.8)이 나타나기 전에 나타납니다 /usr/bin(여기서 gcc기본적으로 연결되어있다) 내에서 Lyken로 다음 생성 링크가 제안 /usr/local/bin나를 위해 이론적으로 작동합니다. 실제로 링커 오류와 별칭으로 실패하면 해당 문제를 해결할 필요없이 해당 오류를 해결할 수 있습니다.

별칭의 또 다른 장점은 homebrew가 처리하고 싶은 glink 버전과 연결된 도구와 경쟁 할 필요가 없다는 것입니다. /usr/local


에 설치할 새 바이너리에 대해이 값을 변경해야 할 수도 있습니다 /usr/local/bin. /usr/local/binPATH 내 위치가 잘못되어 다른 바이너리가 설치되어 숨겨져있을 수도 있습니다 . 내 대답을 다시 한 번 고려하십시오. 실제 문제를 한 번, 정확하고 영원히 공격하고 있습니다.
dan

권리. 나는 변경하는 것이 Lyken에 대한 언급 이전 한 PATH넣어 /usr/local/bin모든 전에. 나는 당신의 진술이 정확하고 수정해야한다고 인정 PATH하지만 (내 경우에는 기본 brew설치 gcc 4.8) gcc 4.8기본적으로 gcc둘 사이에 symlink가 없기 때문에 전화 할 때 기본적으로 호출하지 않습니다 . 위에서했던 것처럼 수동으로 만들어야했습니다.
quine

나는 그 자체의 대답이 될만큼 충분히 다르다고 말하지만, 당신의 대답은 해결 된 것으로 표시합니다.
Digitalchild

알겠습니다-Lyken에게 감사합니다. 시스템에서 그렇게 할 수있게 되 자마자하겠습니다.
quine

1
별칭도 시도했지만 gcc터미널에서 직접 실행하는 경우에만 제대로 작동합니다 . makefile을 사용하는 경우 clang에도 여전히 사용되지만에서 사용할 수있는 컴파일러 옵션을 사용할 때만이 문제를 발견했습니다 gcc.
Tien Do

11

나는 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

그리고 애플 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

또는 파일에 넣고 다음을 수행하십시오. source <file>


1

실제 쉘 초기화가를 통해 수행되었다고 가정 ~/.profile하면 관련 바이너리가 /usr/local/bin있는 다른 PATH 구성 요소보다 우선 하도록 수정해야합니다 gcc.

이 깔끔한 수정을 수행하는 방법은 다음과 같습니다.

CD

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

만약 [ "$ {_ shell_init}"= ""]; 그때
    # PATH가 .profile에 정의되어 있지 않습니다
    # PATH의 첫 번째 상대 정의를 설치하십시오.
    echo 'PATH = / usr / local / bin : $ {PATH}
내보내기 경로 '>>. profile
    . .윤곽
    exec $ {SHELL}
그밖에
    # / usr / local / bin의 모든 발생을 제거하십시오
    # PATH로 설정하고 다른 모든 구성 요소보다 먼저 삽입하십시오.
    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
    . .윤곽
    exec $ {SHELL}
fi

주의 : ~/.profile이미 구조화되어 있다면 올바른 PATH 정의가 올바른 위치에 맞도록이 쉘 스크립트를 수동으로 조정해야합니다.


이것은 처음에 볼 수 있도록 수정 하기에 완벽 합니다 . 이것은 미래에 두통을 덜어 줄 것입니다. 나는 당신을 +1 할 수 있기를 바랍니다. 내 문제는 비록 즉 여전히 연결되어 하지 에 대한 심볼릭 링크가 없기 때문에 에서 . 스크립트로 업데이트 한 후에도 내부 또는 symlink ( ) 로 별칭을 지정해야합니다 . 이인칭 대명사? PATH/usr/local/bingccgcc 4.2gcc 4.8gcc -> gcc-4.8/usr/local/bingccgcc-4.8~/.profileln -s gcc-4.8 gcc/usr/local/binPATH
quine

brew올바른 기호 링크를 추가하지 않은 것에 놀랐습니다 . 같은 주제에 대해이 답변을 읽었습니까 : apple.stackexchange.com/a/38247/22003 ?
dan

0

별칭을 만들거나 다른 gcc 바이너리에 연결하면 기본 시스템 포함 폴더보다 고유 한 포함을 사용한다고 가정합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.