Compiler Option

MySprtlty·2022년 7월 14일
0

gcc

목록 보기
4/6
post-thumbnail

🏷️Compiler Option

  • cc1은 GNU에서 만든 C언어 컴파일러다.

📌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

0개의 댓글