🏷️전처리기 옵션
- 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한 것과 동일하다.
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
옵션들이 전달된다.