我需要编写一个快速的makefile来构建我的所有项目。这是C ++代码,我正在使用gmake。
假设我有一个目录列表,我想cd到每个目录,发出gmake命令,如果成功,请转到下一个,依此类推。
我通过查看gmake manual
来烹饪.PHONY: all clean dirs $(DIRS)
dirs: $(DIRS)
$(DIRS): \n\t
$(MAKE) -C $@
它适用于“所有”目标 - 如果我只输入gmake,它就是正确的。但是,如果我做gmake清洁,它什么都不做。
我正在学习gmake,所以我肯定在做一些愚蠢的事情:)
感谢您的帮助。
答案 0 :(得分:8)
为了递归地创建除第一个目标之外的东西(我猜测所有目标都是你的第一个目标),你需要让sub-make知道要构建什么。您可以使用MAKEFLAGS和MAKECMDGOALS变量进行此操作。
例如:
$(DIRS):
$(MAKE) -C "$@" $(MAKEFLAGS) $(MAKECMDGOALS)
您的规则未传递目标名称,例如干净,所以sub-make没有工作要做(因为所有的都已经建成)。