递归gmake问题

时间:2009-08-07 15:56:32

标签: recursion makefile gnu-make

我需要编写一个快速的makefile来构建我的所有项目。这是C ++代码,我正在使用gmake。

假设我有一个目录列表,我想cd到每个目录,发出gmake命令,如果成功,请转到下一个,依此类推。

我通过查看gmake manual

来烹饪
.PHONY: all clean dirs $(DIRS)

dirs: $(DIRS)

$(DIRS): \n\t
    $(MAKE) -C $@

它适用于“所有”目标 - 如果我只输入gmake,它就是正确的。但是,如果我做gmake清洁,它什么都不做。

我正在学习gmake,所以我肯定在做一些愚蠢的事情:)

感谢您的帮助。

1 个答案:

答案 0 :(得分:8)

为了递归地创建除第一个目标之外的东西(我猜测所有目标都是你的第一个目标),你需要让sub-make知道要构建什么。您可以使用MAKEFLAGS和MAKECMDGOALS变量进行此操作。

例如:

$(DIRS):
        $(MAKE) -C "$@" $(MAKEFLAGS) $(MAKECMDGOALS)

您的规则未传递目标名称,例如干净,所以sub-make没有工作要做(因为所有的都已经建成)。