【问题标题】:Makefile - build from multiple directoriesMakefile - 从多个目录构建
【发布时间】: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)))

谢谢

【问题讨论】:

    标签: makefile build compilation


    【解决方案1】:

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

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

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

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

    获得所需效果的最简单方法是使用vpath directivestatic pattern rule

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

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

    【讨论】:

    • 非常感谢@Beta!
    猜你喜欢
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多