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 - 从多个目录构建的主要内容,如果未能解决你的问题,请参考以下文章