2010-07-16 2 views
1

종속성을 자동으로 생성하려는 makefile을 사용하고 있습니다. 그러나 내 파일에서는 헤더 파일을 변경하면 코드가 다시 컴파일되지만 종속성이 다시 생성되지는 않는다고 생각합니다. 그렇다고 생각합니다. 아무도 내가 놓친 것을 볼 수 있습니까?Makefile 종속성 생성이 헤더를 검사하지 않습니다.

.SUFFIXES : .hpp .cpp .d .o 
SOURCES=main.cpp sub1.cpp sub2.cpp 
OBJECTS=${SOURCES:.cpp=.o} 
DEPENDENCIES=${SOURCES:.cpp=.d} 

.cpp.d: 
    g++ -MM $< > [email protected] 
.cpp.o: 
    g++ $< -c `pkg-config gtkmm-2.4 --cflags --libs` -g 

calculator: ${OBJECTS} ${DEPENDENCIES} 
    g++ ${OBJECTS} -o calculator `pkg-config gtkmm-2.4 --cflags --libs` -g 

include ${DEPENDENCIES} 
+0

을 삭제 한 경우에도 이것은 침입하지 않도록 메이크업 도움이 될

test.o: test.cpp test.h dummy.h etc_bkp.h test.h: dummy.h: etc_bkp.h: 

생성 교활한. 나는 profi 응답을 기다릴 것입니다. 문제의 핵심은 분명히 .d는 .cpp에만 의존하며 헤더 파일의 변경 사항은 무시합니다. 그래서 어떤면에서 .d는 .d에 의존해야합니다 .... 의존성은 모든 것을 make로 사용하지 않는 이유 중 하나입니다. – Dummy00001

답변

1

찾을 솔루션 나 자신. 트릭은 official GNU make documentation에도 표시됩니다.

의존성가 같아야 생성하기 : 줄 나오지

.cpp.d: 
     g++ -MM $< | sed 's!^$(<:.cpp=.o):!$(<:.cpp=.o) $(<:.cpp=.d):!' > [email protected] 

로부터 종속성 선 변환 "main.o를 메인으로"는 main.o를 MAIN.CPP/hello.hpp 포함 ". d : main.cpp include/hello.hpp "(필자의 최소화 된 테스트의 예제) .d 파일을 .o 파일과 동일한 파일에 의존합니다.

저는 개인적으로 예를 들어 SCons 자동으로 의존성 추적이 가능한데, 내 경험상 새 헤더 파일이 도입되거나 일부 파일의 이름이 바뀌면 GNU make 솔루션이 자주 중단됩니다.

+0

감사합니다, Dummy00001. 그 트릭을 한 것 같습니다. –

1

Dummy00001의 솔루션에 동의하지만 g ++ 명령에 -MP 플래그를 추가하여 종속성 파일을 생성하는 것이 도움이 될 수 있습니다. 그것은 PHONY 대상에 종속성 목록의 모든 헤더 파일 이름을 추가합니다. g++ -MM $<

test.o: test.cpp test.h dummy.h etc_bkp.h 

를 생성하는 경우

즉, 다음 g++ -MM -MP $<이는 이름 변경이 완료되거나 파일이

+0

감사합니다. vamsi. 나는 그것을 들여다 볼 것이다. –

관련 문제