🏷️Compiler Option
📌C언어 옵션
-ansi
- ANSI C(C89)를 기준으로 문법 체크를 한다.
-pedantic
경고 옵션과 주로 같이 사용한다.
-std={C표준들}
- 표준을 지정하고자 할 때 사용한다.
- ex) c89와 c99를 지정
-std=c89
-std=c99
📌경고 옵션
- cc1의 옵션을 이용하여 경고 수위를 조절할 수 있다.
-W
- W stands for Warning
- 합법적이지만 모호한 코딩에 대해 부가적인 정보를 제공한다.
-Wall
- Wall stands for Warning all
- 모든 모호한 문법에 대해 경고메세지를 출력한다.
-Wno-{제거할 경고명}
- Wno stands for Waring no
- 경고 메시지를 지정해서 출력되지 않게 한다.
- 경고명은 man page에서 볼 수 있다.
- ex)
-Wno-unused-variable
-Wno-unused-function
-Wno-unused-parameter
-w
-Werror
- 모든 경고를 컴파일을 중단할 오류로 취급한다.
- 경고가 하나만 나와도 컴파일은 중단된다.
-pedantic
- C89에서 요구하는 모든 경고 메시지를 표시한다.
- 🗽voca) pedantic[pɪˈdæntɪk]: 지나치게 규칙을 찾는
📌최적화 옵션
-O
다음 붙는 것은 레벨이다.
- 레벨이 높을수록 높은 수준의 최적화를 수행한다.
-O0
- 아무런 최적화를 수행하지 않는다.
-O
옵션을 주지 않을 경우 default로 동작하는 레벨이다.
-O2
- 가장 많이 사용하는 레벨이다.
- 일반 응용프로그램이나 커널 컴파일할 때 사용한다.
-O3
- 모든 함수를 인라인 함수와 같이 취급한다.
- 소스 코드에 너무나 많은 변경을 가하기 때문에 사용해서는 안된다.
-Os
- Os stands for Optimization size
- 사이즈 최적화를 수행한다.
- 임베디드 시스템에서 자주 사용된다.
📌디버깅 옵션
-g
- gdb에게 제공하는 정보(디버깅 심볼)를 바이러리에 삽입한다.
- 또한 C프로그램 소스 정보를 바이러리 안에 삽입한다.
- 이로 인해, gdb로 디버깅 시 소스를 보며 디버깅 하는 것을 가능케 한다.
-g
옵션이 없으면, 역어셈블하여 생성한 어셈블리 코드로 디버깅할 수밖에 없다.
- 소스 정보가 삽입된다고 실제 소스의 내용이 삽입되는 것은 아니다.
- 단지, 어떤 instruction이 어떤 소스파일의 몇번째 행인지 나타내는 정보만 삽입된다.
-g
옵션으로 디버깅 심볼을 삽입한 바이러리는 용량이 매우 크기 때문에 개발이 끝나면 제거해야한다.
- 최적화 옵션(
-O
)을 사용하지 않는 것이 좋다.
-pg
- pg stands for prof & gprof
- profile을 위한 코드를 삽입한다.
-pg
옵션으로 컴파일한 프로그램이 종료되면, 프로파일 정보가 gmon.out 파일에 저장된다.
gprof
로 gmon.out 파일의 내용을 분석할 수 있다.
- 어떤 함수가 몇번 호출되었는지, 시간이 얼마나 걸렸는지 등을 확인할 수 있다.
- ex)
gcc -pg -o test test.c
gprof ./test