一个Makefile,在许多子目录中使用
我正在寻找一个makefile,它在当前目录的所有子目录中调用它自己的目标。我想出了这个作为一个起点:
SUBDIRS := $(shell find . -maxdepth 1 -type d | sed -e 's/^/"/;s/$$/"/')
all:
@for d in $(SUBDIRS); do
($(MAKE) -f "../$(lastword $(MAKEFILE_LIST))" -C "$$d" gallery.html);
done
gallery.html:
echo "Making galleryn";
这是解决问题的正确方法吗?
这真的是发现责备并正确引用它们的“最干净”方式吗?
我很高兴使用GNU make扩展。
没有找到相关结果
已邀请:
2 个回复
久坡
可能根本就不是工作的正确工具:它真的想要使用以空格分隔的单词列表,并且没有引用的概念可以帮助它处理路径中的空格。 如果子目录名称包含空格字符,我会将内容拆分为单独的shell脚本和makefile,如下所示:
和
(请记住,如果子目录中有更多带有空格的路径,make仍然是一个糟糕的选择) 如果子目录名称不包含空格字符,那么可以使事情变得更加简单,并且您还可以避免递归make调用(google“递归使其被视为有害”,原因如下):
骚瓤
具有一些复杂的本地先决条件时,这种递归才有意义,即使这样,它也可能不是最好的方法。这种对makefile名称的敏感性是一个非常糟糕的迹象。但如果这就是你想要的,我建议做出以下改变: