2012-06-05 56 views
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 
+0

'export'不是'makefile'的正常部分。如果頂層makefile讀取每個子目錄的makefile,你可能會做些什麼,但是如果頂級makefile運行一個新的'make'副本,新的'make'沒有簡單的方法來提供信息回到原始的makefile。 –

+0

不同子目錄中的源文件可能具有相同的名稱,例如: 'sub1/a.c'和'sub2/a.c'? – Beta

+0

謝謝Jonathan Leffler!我正在考慮使用包括現在。 – pengguang001

回答

1

自己做的青睞,並使用高層次的構建系統,如果可以的話。幾乎所有東西都比手寫的Makefiles更好。例如。 CMakeSConswaf是一些更受歡迎的替代品。