如何从makefile更改目录并执行子目录make file?

时间:2015-07-14 06:25:39

标签: makefile

假设A有两个子目录B和C,其中每个子目录都有自己的make文件。父A有自己的make文件。要调用子目录,我必须在父makefile中使用下面的命令:

subB:
   cd B && make
subC:
   cd c && make

是否存在使用单个语句调用子目录makefile的通用方法。因为将来可能会添加更多50到60个文件夹。编写它的一般方法是什么

3 个答案:

答案 0 :(得分:1)

我会使用make -Cfind的组合。

make -C <directory>像往常一样运行,除了在运行命令之前暂时更改为<directory>

find是遍历目录树的命令。默认情况下,它会打印当前工作目录中包含的所有文件,目录,符号链接等的路径。您还可以使用find选项告诉-exec在每个路径上运行特定命令而不是打印它们。在传递给-exec的命令中,{}代表当前文件/目录的路径,并且;是标记命令结尾所必需的(这些是shell语法中的特殊字符)所以你需要引用它们。)

例如,如果您想在当前工作目录的所有目录中运行Makefile,那么您可以这样做:

sub:
    find -maxdepth 1 -type d -exec make -C '{}' ';'

-type d告诉find仅在目录上运行。 -maxdepth 1表示只检查当前目录正下方的目录;其中的子目录不会。

答案 1 :(得分:0)

列出目录:

ui:repeat

告诉make目录不是目标,你确实想要触发相关的配方:

DIRS := $(shell find -maxdepth 1 -type d)

强制性非模式规则:

.PHONY: all $(DIRS)

与子目录匹配的模式规则(并过滤掉当前目录):

all: $(DIRS)

结果:

./%:
    $(MAKE) -C $*

答案 2 :(得分:0)

DIR:= $(wildcard */.)

    dir:
     for dir in $(DIR); do \
          $(MAKE) -C $$dir; \
     done