make -p 알려드렸는데 많다고 안 보시거나 하나하나 분석하는 경우가 많아서 공유합니다.

make 관련 옵션


옵션 설명
-d 또는 --debug=[FLAGS] 디버그 정보 출력
-p 또는 --print_data-base 내부 데이터베이스 출력
-r 또는 --no-builtin-rules 내장된 묵시적 규칙 비활성화
-R 또는 --no-builtin-variables 내장된 변수 비활성화

자동 변수


# 현재 타겟 이름
@F = $(notdir $@)
@D = $(patsubst %/,%,$(dir $@))

# 종속 항목 리스트 중 가장 왼쪽 항목
<F = $(notdir $<)
<D = $(patsubst %/,%,$(dir $<))

# 종속 항목 리스트에서 가장 최근 변경된 항목
?F = $(notdir $?)
?D = $(patsubst %/,%,$(dir $?))

# 종속 항목 리스트에서 현재 타겟보다 최근에 변경된 항목
*F = $(notdir $*)
*D = $(patsubst %/,%,$(dir $*))

# 종속 항목 리스트 전체 (중복 제거)
^F = $(notdir $^)
^D = $(patsubst %/,%,$(dir $^))

# 종속 항목 리스트 전체 (중복 포함)
+D = $(patsubst %/,%,$(dir $+))
+F = $(notdir $+)

# 현재 타겟이 라이브러리 모듈일 때 .o 파일에 대응되는 이름
%F = $(notdir $%)
%D = $(patsubst %/,%,$(dir $%))

확장자 규칙(Suffix Rule)


.SUFFIXES에 설정된 확장자를 자동으로 인식해서 필요한 작업을 수행하던 설정이다.

SUFFIXES := .out .a .ln .o .c .cc .C .cpp .p .f .F .m .r .y .l .ym .yl .s .S .mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo .w .ch .web .sh .elc .el
.SUFFIXES := .out .a .ln .o .c .cc .C .cpp .p .f .F .m .r .y .l .ym .yl .s .S .mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo .w .ch .web .sh .elc .el

C와 관련된 확장자 구규칙(.c.o)과 최신 규칙(%.o : %.c)은 다음과 같으며 이하 생략한다.

.c.o:
	$(COMPILE.c) $(OUTPUT_OPTION) $<
%.o : %.c
	$(COMPILE.c) $(OUTPUT_OPTION) $<
.c:
	$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@
% : %.c
	$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@
.o:
	$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@
% : %.o
	$(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@

내장 변수와 규칙