從我的當前項目的生成文件的一些轉述位,可以幫助你解決好老老式GNU化妝:
SOURCEDIR := dir1 dir2/subdir1 dir3 dir4 dir5/subdir1 dir6/subdir1
SOURCES := $(foreach srcdir,$(SOURCEDIR),$(wildcard $(srcdir)/*.c))
OBJECTS := $(patsubst %.c,build/%.o,$(SOURCES))
OBJDIRS := $(addprefix build/,$(SOURCEDIR))
MAKEDEPS := $(patsubst %.c,build/%.d,$(SOURCES))
all: example
$(OBJDIRS):
-mkdir -p [email protected]
build: $(OBJDIRS)
build/%.o : %.c | build
cc -MMD -c -o [email protected] $<
example: $(OBJECTS)
cc -o [email protected] $(OBJECTS)
-include $(MAKEDEPS)
從本質上講,它建立如果多個來源的所有在指定的目錄插入位於build
目錄層次結構中的,平行的源目錄佈局的子目錄中的目標文件中找到的源文件(重要文件具有相同的名稱),然後將結果鏈接到可執行文件example
。
作爲獎勵,通過MAKEDEPS
變量和clang的-MMD
標誌生成和包含動態依賴項。
「make」有什麼問題? –
繁瑣,我認爲我的無知。我找不到使用make的簡單方法。 – manasij7479
好的 - 回答GNU make。讓我知道你是否想要更多的解釋。我確信有人對cmake或更多的東西有更多的瞭解,最終會回答。 –