2010-05-11 3 views
1

다음은 6 개의 프로그램에 대한 간단한 헤더 파일입니다. 이 Makefile은 잘 작동했지만 이전에는 다른 구현 파일을 포함하도록 프로그램을 변경했습니다. 이 Makefile은 구현 파일이 변경되면 해당 구현 파일을 포함하는 파일이 다시 컴파일되도록 변경해야합니다.이 헤더 파일에 종속성을 추가하는 방법

all: load list show add delete btree 
%: %.cpp 
    g++ $< -g -o [email protected] 

답변

2

gcc의 -MM 옵션을 사용하여 종속 파일을 만든 다음 Makefile에 포함 할 수 있습니다.

TARGETS = load list show add delete btree 
all: $(TARGETS) 
%: %.cpp 
    g++ $< -g -o [email protected] -MM -MF [email protected] 
    sed "s/[email protected]\.o:/[email protected]:/" [email protected] > [email protected] 
    [email protected] [email protected] 

DEPS=$(TARGETS:%=%.d) 
-include $(DEPS) 

sed 라인 load.o: load.c에서 load: load.c에 종속 파일을 변경 존재한다.

+0

g ++ -MM list.cpp을 실행하면 다음과 같은 결과가 나옵니다. list.o : list.cpp bt.h insert.c btio.c btutil.c Lab2.cpp. 나는 그걸 어떻게해야 하죠? 실제로 아무것도 만들지 않습니다. – neuromancer

+0

직접 실행하지 않아도됩니다. % : % .cpp 규칙이이를 실행합니다. 이 규칙은 그 라인을 make 파일에 포함 된 .d 파일의 집합으로 변환한다. – Mark

+0

'-MM'은이 출력을 생성하고'-MF'는 파일을 (.dd로 끝나는) 파일로 리다이렉트한다. 다음 줄은'sed'를 약간 수정하고'.d'로 이름을 바꿉니다. 이 마지막'.d' 파일들은 Makefile에 포함되어 있으며 make가 어떤 파일을 다른 파일에 의존하는지 알려줍니다. –

관련 문제