递归gmake问题

MK.*_*MK. 2 recursion makefile gnu-make

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

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

我通过查看gmake手册来烹饪

.PHONY: all clean dirs $(DIRS)

dirs: $(DIRS)

$(DIRS): \n\t
    $(MAKE) -C $@
Run Code Online (Sandbox Code Playgroud)

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

我正在学习gmake,所以我肯定在做傻事:)

谢谢你的帮助.

小智 8

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

例如:

$(DIRS):
        $(MAKE) -C "$@" $(MAKEFLAGS) $(MAKECMDGOALS)
Run Code Online (Sandbox Code Playgroud)

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