1
그러나 foo.c에 포함 된 헤더 중 하나가 변경되었을 수 있으므로 실행하려면 제조법이 필요합니다.
그래서 foo.d에 나열된 파일 중 하나가 foo.o보다 최신 파일 인 경우 foo.o에 대한 레서피를 실행해야한다는 것을 알려주는 것이 좋습니다.
감사합니다.
그러나 foo.c에 포함 된 헤더 중 하나가 변경되었을 수 있으므로 실행하려면 제조법이 필요합니다.
그래서 foo.d에 나열된 파일 중 하나가 foo.o보다 최신 파일 인 경우 foo.o에 대한 레서피를 실행해야한다는 것을 알려주는 것이 좋습니다.
감사합니다.
종속 파일의 요점은 목표 종속성이 아니라는 것입니다. 은 올바른 종속성을 가진 대상을 완료한다는 것입니다. 실제로는 Makefile에서 포함시켜야합니다. 여기
는 기본 예입니다SRC = foo.c main.c
OBJ = $(SRC:.c=.o)
DEPS = $(SRC:.c=.d)
-include $(DEPS)
all: myapp.o
myapp.o: foo.o main.o
gcc -c main.o foo.o -o myapp.o
main.o: main.c
gcc -M ...
foo.o: foo.c
gcc -M ...
.PHONY: all
지금 무슨 일하는 $에있는 각 파일의 내용 (DEPS)이 Makefile의 복사 - 붙여 넣기 할 것입니다.
SRC = foo.c main.c
OBJ = $(SRC:.c=.o)
DEPS = $(SRC:.c=.d)
-include $(DEPS)
all: myapp.o
myapp.o: foo.o main.o
gcc -c main.o foo.o -o myapp.o
main.o: main.c foo.c foo.h
gcc -M ...
foo.o: foo.c
gcc -M ...
.PHONY: all
방법 관찰 : 우리는 메이크 파일에서 포함을 적용하는 경우
가 여기에 GNU 마지막으로 분석 할 무엇main.o: \
foo.c \
foo.h
: main.c
아마 foo.c
를 사용하므로 여기에, foo.h
이 포함되어 있기 때문에 main.d
의 모습거야 foo.c와 foo.h는 이제 main.o의 전제 조건입니다. 즉, 그 중 하나가 변경되면 main.o를 다시 빌드해야합니다.