假设A有两个子目录B和C,其中每个子目录都有自己的make文件。父A有自己的make文件。要调用子目录,我必须在父makefile中使用下面的命令:
subB:
cd B && make
subC:
cd c && make
是否存在使用单个语句调用子目录makefile的通用方法。因为将来可能会添加更多50到60个文件夹。编写它的一般方法是什么
答案 0 :(得分:1)
我会使用make -C
和find
的组合。
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