我正在为一个项目编写一个 makefile 框架。比如说,我在顶部目录中有一个 main.c,还有许多子目录,每个子目录都包含一个 C 文件。为了将所有目标文件链接到goter,我在顶部makefile中分配了一个初始值:
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 $@ $(CFLAGS)
subdirs: $(patsubst %, _dir_%, $(SUBDIRS))
$(patsubst %, _dir_%, $(SUBDIRS)) :
$(MAKE) -C $(patsubst _dir_%, %, $@) $(TGT)
规则.make:
all:$(TARGET)
%.o:%.c
@echo $(TARGET_LIST)
$(CC) -c $^ -o $@ $(CFLAGS) $(LDFLAGS)
子目录生成文件:
TARGET := a.o
TARGET_LIST += $(TARGET)
CFLAGS :=
LDFLAGS :=
include $(TOP_DIR)/Rules.make