首页 > 解决方案 > 如何递归地使用 make 和子收据?

问题描述

我必须制作如下文件:

Makefile
foo/
    Makefile

顶级制作看起来像:

make-sample:
  cd foo && make all

底部制作看起来像:

all:
    ./builder.sh  

子程序按设计工作并将一些内容打印到终端。从顶部 make 文件运行它时:make foo它不会返回相同的 cli 输出,这让我觉得有些地方不正确。我正在查看 make https://www.gnu.org/software/make/manual/html_node/Recursion.html#Recursion的递归手册页,我对此有所了解。看起来我很接近了,虽然我不明白$(MAKE)没有给出食谱的用途。

看起来它想让我说类似的话:

make-sample:
    cd foo && $(MAKE)
# or
make-sample2:
    $(MAKE) -C foo

有人可以更好地向我解释如何使用配方运行子制作,以便将相同的信息正确记录到标准输出吗?

标签: makefile

解决方案


在您的顶级目录中,foo是一个目录,您需要通过添加以下行明确告诉make您的目标名称foo不是文件,也不是目录:

.PHONY: foo

否则,当您从顶级目录执行操作时,make可能什么都不做。make foo


推荐阅读