2016-07-07 4 views
2

기본 gcc 컴파일러 옵션이 다른 기본 컴파일러 옵션을 기대할 수있는 경우 달라질 수 있는지 궁금합니다. 기본 컴파일러 옵션은 gcc 버전마다 다릅니다 (예 : gcc 4.6 -> gcc 4.8) 또는 항상 동일합니까? 기본 컴파일러 옵션은 OS 버전에 따라 다릅니다 (예 : Ubuntu 12.04 -> 14.04)?기본 gcc 컴파일러 옵션은 gcc 버전과 OS 또는 둘 모두입니까?

기본 컴파일러 옵션이 우분투 및 데비안과 같이 서로 다른 두 개의 OS에 따라 다를 수 있습니다. 맞습니까?

+0

우분투는 데비안을 기반으로합니다. – Olaf

+0

@Olaf ...하지만 데비안 바위;) – LPs

+0

이것은 반드시 기본 컴파일러 옵션이 동일하다는 것을 의미합니까? – Maximilian

답변

3

예, 일반적으로 기본 플래그가 상당히 다를 것으로 기대할 수 있습니다. 다행스럽게도 플래그가 무엇인지 알 필요가 없으므로 플래그를 설정할 필요가 없습니다.

우분투와 데비안은 꽤 비슷합니다. 왜냐하면 우분투는 데비안을 아주 근거로하고 있기 때문입니다. 그러나 GCC가 실제로 사용하는 옵션은 상당히 기술적이기 때문에 다양한 옵션을 볼 수 있습니다. 다음을 실행하여 그들을 볼 수 있습니다 :

gcc -Q -v -x c -c /dev/null 

이것은 C 프로그램 (-x c -c /dev/null)로 /dev/null을 컴파일 및 개발자 정보 (-Q -v)의 무리를 출력 GCC를 요청합니다. 나는 이것을 GCC 4.4, 4.6, 4.8에서 돌렸고 다른 결과를 얻었다. 내 컴퓨터에

> -faggressive-loop-optimizations 
> -fgnu-runtime 
> -fgnu-unique 
< -finline-functions-called-once 
> -finline-atomics 
> -fira-hoist-pressure 
> -fsync-libcalls 
> -ftree-coalesce-vars 
< -fvect-cost-model 
> -mfxsr 
> -mlong-double-80 

는, GCC는 다른 80 사용 : 여기

< -falign-loops 
< -fargument-alias 
> -fdelete-null-pointer-checks 
> -fprefetch-loop-arrays 
> -fsched-critical-path-heuristic 
> -fsched-dep-count-heuristic 
> -fsched-group-heuristic 
> -fsched-last-insn-heuristic 
> -fsched-rank-heuristic 
> -fsched-spec-insn-heuristic 
> -fshow-column 
> -fstrict-volatile-bitfields 
> -ftree-forwprop 
> -ftree-loop-if-convert 
> -ftree-phiprop 
> -ftree-pta 
> -ftree-slp-vectorize 
> -fvar-tracking-assignments 
< -mfused-madd 

내 컴퓨터에 버전 4.6에서 4.8의 차이점은 다음과 같습니다 여기에 내 컴퓨터에 4.4 및 4.6에 대한 옵션 사이의 차이점은 C를 컴파일 할 때 기본적으로 옵션! 옵션은 C++를 컴파일하거나 다른 플랫폼에서 컴파일 할 때 변경됩니다.

하지만 괜찮습니다. 기본적으로 이러한 모든 옵션을 무시하고 가장 중요한 플래그는 다양한 -W 경고 플래그, -O 최적화 플래그 (실제로는 미리 선택된 톤의 -f 플래그에 대한 바로 가기이고 내 컴퓨터에는 수십 개의 숫자가있는 -m입니다. -O2은 63 개의 추가 플래그를 가능하게합니다!) 및 -g 디버그 데이터 플래그.

그리고 물론 , 기본 플래그, -std= 같은 -c, -o, -l, -I 등 내 말은

, 당신이 정말로 -fbranch-count-reg가 무엇을 알아야합니까? 그렇지 않아.

0

automake과 같은 도구를 활용하여 응용 프로그램의 Makefile을 빌드하는 것이 좋습니다. 이 도구는 환경에 따라 다양한 방식으로 파일을 빌드 할 수 있습니다. 그런 다음 해당 메이크 파일 내에서 은 중요한 옵션 인을 지정합니다. 기본값 ("우연히")으로 두지 마십시오.

+1

이 대답은 어떻게 질문과 관련이 있습니다 .... O.o ??? – LPs

+0

""명시된대로 "라는 질문은 단순히"* 기본 옵션이 달라졌습니까? "* *"다른 컴파일러 옵션을 어디에서 기대할 수 있습니까? "라고 제안한 것처럼 * 질문의 추진력을 해석했습니다. "모든 경우에 어떤 일이 일어날 지 어떻게 확신 할 수 있습니까?" 그래서, 회신을하려고했습니다 : * (a) * Automake를 사용하고, * (b) * 기본값에 의존하는 대신 모든 것을 지정하십시오. ** 이제, ** 모든 상황에서 어떤 일이 일어날 지 알고 있습니다. 사용자는 잘 익숙한'configure && make' 프로 시저를 실행하고, 어떤 일이 일어나는지 완벽하게 제어 할 수 있습니다. –

+0

OP는 _default gcc 컴파일러 옵션을 요청합니다 _ _ ... 어떻게 automake가 그들을 변경할 수 있습니까? – LPs