2010-05-11 70 views
1

這是六個不同程序的簡單頭文件。這個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.cload: load.c

+0

當我做g ++ -MM list.cpp時,我得到以下輸出:list.o:list.cpp bt.h insert.c btio.c btutil.c Lab2.cpp。我應該怎麼做?它實際上並沒有創造任何東西。 – neuromancer 2010-05-11 09:36:58

+0

您不需要直接運行它 - %:%.cpp規則可以做到這一點。該規則將該行轉換爲一組包含在makefile中的.d文件。 – Mark 2010-05-11 10:57:08

+0

'-MM'生成此輸出,'-MF'將它重定向到一個文件中(以.dd結尾)。下一行運行'sed'稍作修改,並在'.d'中重命名。這些最後的'.d'文件包含在Makefile中,並告訴make哪個文件依賴於哪個文件。 – 2010-05-11 11:20:21