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

说我有一个目录列表,我想对每个目录进行cd,发出gmake命令,如果成功,则转到下一个目录,依此类推。

我看了gmake manual

.PHONY: all clean dirs $(DIRS)

dirs: $(DIRS)

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


它适用于“所有”目标-如果我只是键入gmake,它将做正确的事情。但是,如果我做gmake clean,它什么也没做。

我正在学习gmake,所以在这里我肯定做得很傻:)

谢谢你的帮助。

最佳答案

为了递归地制作除第一个目标之外的其他内容(我想所有都是您的第一个目标),您需要让子制造商了解构建什么。您可以使用MAKEFLAGS和MAKECMDGOALS变量来执行此操作。

例如:

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


您的规则未传递目标名称,例如干净,因此子制作无需做任何工作(因为所有内容均已构建)。

关于recursion - 递归gmake问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1245595/

10-13 05:27