有不同的方式來做到這一點,但我會開始不讓makefile與項目一起成長。相反,我會使用常規結構來定義規則,以便在一個目錄中處理具有一個代碼文件的項目,並將這些規則處理爲帶有文件的大型項目。
例如讓玩家一點點你的結構(未測試可能有一些錯別字,我假設你開始從項目目錄做):
# we nead the header directory
INCDIRS = src
# collect every cpp file
CXXSRCS = $(shell find src/ -type f -name '*.cpp' 2>/dev/null)
# now generate the object file names
OBJSTMP = $(CXXSRCS:%.cpp=obj/%.o)
# compiled the source file
obj/%.o: src/%.cpp
$(CXX) ${CXXFLAGS} $(foreach bin,${INCDIRS},-I${bin}) -o "[email protected]" "$<"
現在讓我們說你main
是part1.cpp
:
ifneq (,$(wildcard src/part1/part1.cpp))
# I just dont like a.out...
executable=${APPLICATION_NAME}
# now lets build the exe:
${executable}: ${OBJS}
$(LD) $(LDFLAGS) -o [email protected] $^
endif
現在的最後一件事是一個小化妝品:
.PHONY: clean all
all: install
compile: ${OBJS}
package: compile ${executable}
#now we can move the object files to were they should be
mv -f obj/part*/* obj/
install: package
無論項目多大,這個makefile都會執行一些步驟。它只是爲了給你一個想法。我忽略了test_files。但是,在未來的考慮中,您可以像使用常規來源一樣收集測試來源。
所以我的觀點是,絕對沒有理由你的makefile有項目的大小增長,只能用其複雜。
欲瞭解更多信息,請查看文檔在這裏計算器,存在的makefile大量信息......
希望幫助,
凱
你想使用自動依賴處理?如果是這樣,你想要依賴文件(例如'part5.d')去哪裏? – Beta
我從來沒有使用過這些。我不知道他們是如何工作的。他們有必要嗎? – Sandles
不,它們是讓Make自動做一些聰明的事情的高級技巧。沒有他們,你可能不得不親自照顧他們,或者沒有他們。 – Beta