Paul Smith의 가이드 here을 사용하여 GNU make 4.0 용 makefile을 설정했습니다. .d 파일이 삭제 된 경우를 제외하고는 모두 작동하는 것으로 보이며 다음 파일로 다시 생성되지 않습니다. make all
. 자동 생성 된 종속 파일이 대상의 종속성으로 나열되어있는 경우가 빠진 경우 가이드에 따르면, 다음 make
는 다시 작성됩니다`make`가 빠진 의존성 파일을 자동 생성하도록하는 방법은 무엇입니까?
%.o : %.c $(DEPDIR)/%.d
$(COMPILE.c) $(OUTPUT_OPTION) $<
$(POSTCOMPILE)
바울의 설명 :
... $(DEPDIR)/%.d
선언을 생성 된 종속성 파일은 대상의 전제 조건이므로 누락 된 경우 대상은 으로 다시 작성됩니다.
이것은 내 경험이 아닙니다. .d
파일을 삭제하고 make all
을 다시 발행하면 모든 것이 최신이라고 결정됩니다. .c의 재 컴파일을 강요하면 물론 종속 파일을 다시 만들지 만 누락 될 때마다 다시 빌드해야하는 종속 파일이 아닙니까? 제 메이크에서
발췌 (이 난 그래서 GCC를 사용하지 않는 것는 IBM에이지만 MAKEDEP 파라미터 종속 파일의 생성을 유발) 종속 파일을 생성하는 이러한 방법으로 대항
POSTCCOMPILE = mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d
%.MODULE: %.C
%.MODULE: %.C $(DEPDIR)/%.d
@system -v "crtcmod module($(OBJLIB)/$*) srcstmf('$<') MAKEDEP('$(DEPDIR)/$*.Td')"
@$(POSTCCOMPILE)
. . .
$(DEPDIR)/%.d: ;
.PRECIOUS: $(DEPDIR)/%.d
. . .
-include $(wildcard $(DEPDIR)/*.d)
, make
은 (모든 C 파일에 포함되는 것은 아닐 가능성을 염두에두고) .d
파일을 다시 만들도록해야합니까?
링크 된 아티클에 따르면 첫 번째 줄은 해당 항목에 대한 기본 제공 규칙을 제거합니다. 필자의 경우에는 아마 GNU make가 모듈을위한 내장 규칙을 가지고 있지 않기 때문에 필요하지 않을 것이다. 그냥 안전을 위해서, 나는 그것을 꺼냈다. 아무런 효과가 없었다. – smeep