make -p
알려드렸는데 많다고 안 보시거나 하나하나 분석하는 경우가 많아서 공유합니다.
옵션 | 설명 |
---|---|
-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 $%))
.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 $@