makefile - 在每个子目录中运行make

标签 makefile gnu-make

我有一个目录 (root_dir),其中包含许多子目录 (subdir1, subdir2, ...)。

我想使用放置在其中的 Makefile 在 root_dir 中的每个目录中运行 make。 (显然假设每个 subdir... 都有自己的 Makefile)。

所以本质上有两个问题:

  1. 如何(自动)获取 Makefile 中的目录列表?
  2. 如何为 make 文件中的每个目录运行 make

据我所知,为了在特定目录中运行 make,我需要执行以下操作:

$(MAKE) -C subdir

最佳答案

在单个配方的 for 循环内执行子 make 会出现各种问题。做多个子目录的最好方法是这样的:

SUBDIRS := $(wildcard */.)

all: $(SUBDIRS)
$(SUBDIRS):
        $(MAKE) -C $@

.PHONY: all $(SUBDIRS)

(只是指出这是 GNU make 特定的;您没有提到对您正在使用的 make 版本的任何限制)。

预计到达时间这是一个支持多个顶级目标的版本。

TOPTARGETS := all clean

SUBDIRS := $(wildcard */.)

$(TOPTARGETS): $(SUBDIRS)
$(SUBDIRS):
        $(MAKE) -C $@ $(MAKECMDGOALS)

.PHONY: $(TOPTARGETS) $(SUBDIRS)

关于makefile - 在每个子目录中运行make,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17834582/

相关文章:

makefile - bash 完成 makefile 目标

macos - 在 OS X 上编译 FUSE 文件系统时遇到问题

bash - 使用 ifdef 和 ifndef 指令

build-process - 指定为对多个规则的依赖时重新执行目标

c - 为另一个架构重建 Linux 内核模块

objective-c - 如何将 Obj-C 2.0 与 GNUstep 一起使用?

linux - Makefile 中的 ?= 是什么

makefile - 使 : Override a flag

c++ - 尝试在 AIX 6.1 上创建构建过程

c++ - 非递归 make : include makefile segment in a loop