0

我正在为一个项目编写一个 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
4

1 回答 1

1

帮自己一个忙,如果可以的话,使用高级构建系统。几乎任何东西都比手写的 Makefile 更好。例如CMakeSConswaf是一些更受欢迎的替代品。

于 2012-06-05T04:53:44.773 回答