Makefile - 从多个目录构建

Posted

技术标签:

【中文标题】Makefile - 从多个目录构建【英文标题】:Makefile - build from multiple directories 【发布时间】:2021-08-18 00:27:31 【问题描述】:

我是 Makefile 新手。

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

我很乐意在构建一种机制方面获得帮助,该机制可以遍历 DIRS 并编译每个路径中的每个 .c 文件。

我不确定这是否是正确的方法,但到目前为止我得到了这个:


DIRS = path1 path2

define generateRules
SOURCES := $(wildcard $(path)/*.c)

%.o: $(SOURCES)
    echo "path is $(path)";
    $(CC) $(CFLAGS) $INCS $DEFS -c $< -o $BUILD/$@
endef

$(foreach path,$(DIRS),$(info $(generateRules)))

谢谢

【问题讨论】:

【参考方案1】:

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

DIRS = path1 path2
SOURCES := $(wildcard $(addsuffix /*.c,$(DIRS)))

由此我们可以生成一个目标列表:

TARGETS = $(patsubst %.c,$(BUILD)/%.o,$(notdir $(SOURCES)))

获得所需效果的最简单方法是使用vpath directive 和static pattern rule:

vpath %.c $(DIRS)

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

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

【讨论】:

非常感谢@Beta!

以上是关于Makefile - 从多个目录构建的主要内容,如果未能解决你的问题,请参考以下文章