0
我正在爲一個項目編寫一個makefile框架。說,我有一個main.c在頂部目錄,和許多subdirs每個包含一個C文件。要鏈接的文件togoter的所有對象,我在頂層Makefile分配初始值:makefile - 如何鏈接所有子目錄中的對象togother?
export TARGET_LIST := main.o
而且在每個子目錄,我附上他們的名單:
# sub1/Makefile
TARGET := a.o
TARGET_LIST += $(TARGET)
當重返頂級目錄,TARGET_LIST仍然是main.o.我確定所有的分區都被輸入。有沒有什麼好方法可以做到這一點?
頂層Makefile:
all: main
export TOP_DIR = $(shell pwd)
export TARGET_LIST := main.o
SUBDIRS := a b c d
CFLAGS := -Iinc
all:main
main:main.o subdirs
cc $(TARGET_LIST) -o [email protected] $(CFLAGS)
subdirs: $(patsubst %, _dir_%, $(SUBDIRS))
$(patsubst %, _dir_%, $(SUBDIRS)) :
$(MAKE) -C $(patsubst _dir_%, %, [email protected]) $(TGT)
的Rules.make中:
all:$(TARGET)
%.o:%.c
@echo $(TARGET_LIST)
$(CC) -c $^ -o [email protected] $(CFLAGS) $(LDFLAGS)
的子目錄的Makefile:
TARGET := a.o
TARGET_LIST += $(TARGET)
CFLAGS :=
LDFLAGS :=
include $(TOP_DIR)/Rules.make
'export'不是'makefile'的正常部分。如果頂層makefile讀取每個子目錄的makefile,你可能會做些什麼,但是如果頂級makefile運行一個新的'make'副本,新的'make'沒有簡單的方法來提供信息回到原始的makefile。 –
不同子目錄中的源文件可能具有相同的名稱,例如: 'sub1/a.c'和'sub2/a.c'? – Beta
謝謝Jonathan Leffler!我正在考慮使用包括現在。 – pengguang001