我一直在嘗試一段時間來在我的生成文件中使用自動依賴關係,但是我努力了很多工作,因爲我爲我的項目使用更復雜的結構,根文件夾中的每個文件。生成文件和項目目錄結構中的自動依賴關係
我使用這段代碼在我的makefile嘗試:
OBJECTS_DIR = obj/
SRCS_DIR = src/
#source files list, i.e : src/foo.cpp src/bar/foo2.cpp
SOURCES = $(shell find $(SRCS_DIR) -name \*.cpp | xargs -d '\n')
#object files list, i.e : obj/foo.o obj/foo2.o
OBJECTS = $(addprefix $(OBJECTS_DIR), $(notdir $(SOURCES:.cpp=.o)))
DEPS = $(OBJECTS_DIR)make.dep
myproject : $(OBJECTS)
$(CC) $(CFLAGS) $(LDFLAGS) -o [email protected] $^
$(OBJECTS) : $(SOURCES)
$(CC) $(CFLAGS) $(LDFLAGS) -o [email protected] -c $(filter %/$(notdir $(@:.o=.cpp)), $(SOURCES))
$(DEPS): $(SOURCES)
$(CC) -MM $(SOURCES) > $(DEPS)
-include $(DEPS)
all : myproject
clean :
@-rm -f $(RELEASE_DIR)* $(OBJECTS_DIR)*
我想存儲在OBJ/make.dep文件中所有的依賴關係。這給了我下面的輸出(這裏FOO包括foo2的):
foo2.o: src/bar/foo2.cpp src/bar/headers/foo2.h
foo.o: src/foo.cpp src/bar/headers/foo2.h
我想每個目標文件的重命名,以具有以下的輸出: OBJ/foo2.o:SRC /酒吧/ foo2的.cpp src/bar/headers/foo2.h obj/foo.o:src/foo.cpp src/bar/headers/foo2.h
我試着用-MT選項沒有結果.. 。 此外,是否包含$(DEPS)足以包含我創建的依賴關係?我不應該用make.dep文件中寫的行來替換OBJECT規則中的$(filter%/ $(notdir $(@ :. o = .cpp)),$(SOURCES))嗎?
在此先感謝您的洞察力,請告訴我是否有任何其他方式來增強我的生成文件!
我寧願只製作一個包含所有依賴關係的文件。我用[這個鏈接](http://stackoverflow.com/questions/1979912/problem-generating-dependencies-in-makefile-using-mm)作爲一個靈感: – Aserre 2013-03-10 18:11:16
已更新爲解答您的評論 – ThePosey 2013-03-10 19:33:21
感謝您的鏈接。我認爲有一個大文件會更快...... – Aserre 2013-03-10 22:53:18