我需要编写一个快速的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/