makefile - 如何将所有子目录中的对象链接在一起?

时间:2012-06-05 04:44:50

标签: makefile

我正在为项目编写makefile框架。说,我在顶部目录中有一个main.c,并且每个子目录都包含一个C文件。要链接所有目标文件togoter,我在顶部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)

Rules.make:

all:$(TARGET)

%.o:%.c
        @echo $(TARGET_LIST)
        $(CC) -c $^ -o $@ $(CFLAGS) $(LDFLAGS)

subdir makefile:

TARGET := a.o
TARGET_LIST += $(TARGET)
CFLAGS := 
LDFLAGS := 

include $(TOP_DIR)/Rules.make

1 个答案:

答案 0 :(得分:1)

尽你所能,如果可以,请使用高级构建系统。几乎任何东西都比手写的Makefile更好。例如。 CMakeSConswaf是一些比较受欢迎的选择。