Preprocessor Option

MySprtlty·2022년 7월 14일
0

gcc

목록 보기
3/6
post-thumbnail

🏷️전처리기 옵션

  • cpp0는 gcc가 사용하는 preprocessor(전처리기)다.
  • 주로 소스내에서 사용된 헤더파일과 매크로와 관련된 옵션들이다.
  • 전처리 과정에서 오류가 발생한다면, cpp0의 옵션들을 점검해야 한다.

📌-l (대문자 아이)

  • 🖇️cf) I stands for Include
  • 전처리 과정에서 헤더 파일을 탐색하는 기본 디렉터리를 추가하는 옵션이다.
  • 라이브러리가 아닌 헤더 파일과 관련된 옵션임에 주의하자.
  • 소스파일에서 #include <헤더 파일>로 include 된 헤더파일은 기본적으로 /usr/local/include, /usr/include 디렉터리 순으로 헤더 파일을 찾는다.
    • 🖇️cf) 오래된 내용이라, distro에 따라 다를 수도 있다.
  • 그러나 #include "헤더 파일" 형태로 include된 헤더파일은 현재 디렉터리에서 찾는다.
  • 🔍ex) /usr/local/include에 헤더 파일이 존재하는 경우
gcc -I/usr/local/include test.c

-I와 경로 사이에 공백이 없음에 주의한다.

📌-include {헤더 파일 경로}

  • 헤더 파일을 소스 내에 추가할 때 사용한다.
  • 소스 제일 첫 부분에 #include "헤더 파일 경로" 한 것과 동일하다.

📌-D{매크로}

  • 🖇️cf) D stands for Define
  • 매크로를 외부에서 define한다.
  • 🔍ex)
gcc -DHELLO -o test test.c

소스 맨 앞에 #define HELLO한 것과 동일하다.

📌-D{매크로}={매크로값}

  • 값이 있는 매크로를 외부에서 define한다.
  • 🔍ex)
gcc -DHELLO=10 -o test test.c

소스 맨 앞에 #define HELLO 10한 것과 동일하다.

  • 🔍ex2)
gcc -DSTR=\"Hello World\" -o test test.c

와일드 카드 "를 일반문자로 만들기 위해 \을 사용한다.

📌-U{매크로}

  • 🖇️cf) U stands for Undefine
  • 매크로를 외부에서 undef한다.
  • 🔍ex)
gcc -DHELLO -o test test.c

📌-M-MM

  • Makefile을 작성할 때 유용한 종속 항목 리스트를 보인다.
  • 🖇️cf) 종속 항목이란, 타겟이 컴파일 되기 위해서 필요한 항목을 의미한다.
    • 🔍ex)
      • test실행 파일은 test.c 소스파일이 필요하다.
      • test.c는 또 stdio.h파일을 필요로 한다. (test.c가 stdio.h를 include한다면)
      • 즉, test실행 파일은 stdio.h가 include하고 있는 여러 헤더 파일도 필요하다.
        - 위와 같은 종속 관계를 Makefile에서 사용하는 형식으로 정리해서 출력한다.

-M

  • 모든 종속항목을 출력한다.

-MM

  • 기본 include 디렉터리에 있는 헤더파일은 제외한 종속항목을 출력한다.

📌-nostdinc

  • 🖇️cf) nostdinc stand for no standard include
  • default include directory에서 헤더파일을 탐색하지 않고, -I옵션으로 추가한 디렉터리에서만 헤더파일을 찾는다.
  • 커널과 같은 표준 C함수를 사용하지 않는 프로그램을 컴파일 할 때, 잘못된 include로 인해 오류가 발생하는 것을 방지한다.

📌-C

  • 🖇️cf) C stand for Comments
  • 전처리 과정에서 주석을 제거하지 않는다.
  • -E옵션과 함께 사용한다.

📌-Wp,[옵션들]

  • 전처리기(cpp0)에게 직접 옵션을 전달한다.
  • 🔍ex)
gcc -Wp,-DHELLO,-I/usr/include,-M …
  • 위와 같이 사용하면 cpp0에게 곧바로 -DHELLO -I/usr/include -M옵션들이 전달된다.

0개의 댓글