Makefile-从多个目录生成

Makefile-从多个目录生成,makefile,build,compilation,Makefile,Build,Compilation,我不熟悉Makefile 我有一个多目录的字符串,我想编译其中的所有.c文件。 该字符串中的路径数可以更改(它作为脚本的参数接收)。 例如: DIRS=路径1路径2 我将很高兴得到帮助,建立一种机制,可以检查DIRS并编译每个路径中的每个.c文件 我不确定这是不是正确的方法,但到目前为止我已经做到了: DIRS=path1路径2 定义生成器 来源:=$(通配符$(路径)/*.c) %.o:$(来源) echo“路径为$(路径)”; $(CC)$(CFLAGS)${INCS}${DEFS}-c$

我不熟悉Makefile

我有一个多目录的字符串,我想编译其中的所有.c文件。 该字符串中的路径数可以更改(它作为脚本的参数接收)。 例如: DIRS=路径1路径2

我将很高兴得到帮助,建立一种机制,可以检查DIRS并编译每个路径中的每个.c文件

我不确定这是不是正确的方法,但到目前为止我已经做到了:


DIRS=path1路径2
定义生成器
来源:=$(通配符$(路径)/*.c)
%.o:$(来源)
echo“路径为$(路径)”;
$(CC)$(CFLAGS)${INCS}${DEFS}-c$<-o${BUILD}/$@
恩德夫
$(foreach路径,$(DIRS),$(info$(generateRules)))

谢谢

让我们从生成源文件列表开始

DIRS = path1 path2
SOURCES := $(wildcard $(addsuffix /*.c,$(DIRS)))
由此,我们可以生成目标列表:

TARGETS = $(patsubst %.c,$(BUILD)/%.o,$(notdir $(SOURCES)))
获得所需效果的最简单方法是使用和:

vpath%.c$(目录)
$(目标):$(构建)/%.o:%.c
@回声大厦$@自$<
$(CC)$(CFLAGS)${INCS}${DEFS}-c$<-o$@

如果您想为每个源目录或每个源文件生成规则,您可以,但这需要一些更高级的技术。我建议您首先使用简单的方法。

非常感谢@Beta!
TARGETS = $(patsubst %.c,$(BUILD)/%.o,$(notdir $(SOURCES)))
vpath %.c $(DIRS)

$(TARGETS): $(BUILD)/%.o: %.c
    @echo building $@ from $<
    $(CC) $(CFLAGS) ${INCS} ${DEFS} -c $< -o $@