我需要编写一个快速的 makefile 来构建我的所有项目。这是 C++ 代码,我正在使用 gmake。
假设我有一个目录列表,我想 cd 到每个目录,发出 gmake 命令,如果成功,则转到下一个目录,依此类推。
我通过查看 gmake manual 来完成这个
.PHONY: all clean dirs $(DIRS)
dirs: $(DIRS)
$(DIRS): \n\t
$(MAKE) -C $@
它适用于“all”目标 - 如果我只输入 gmake,它就会做正确的事情。但如果我执行 gmake clean 它什么也不做。
我正在学习 gmake,所以我肯定在这里做了一些愚蠢的事情:)
感谢您的帮助。
最佳答案
为了递归地制作第一个目标以外的东西(我猜所有都是你的第一个目标),你需要让子制作知道要构建什么。您可以使用 MAKEFLAGS 和 MAKECMDGOALS 变量来执行此操作。
例如:
$(DIRS):
$(MAKE) -C "$@" $(MAKEFLAGS) $(MAKECMDGOALS)
您的规则没有传递目标名称,例如干净,因此子 make 没有任何工作要做(因为所有内容都已构建)。
关于recursion - 递归gmake问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1245595/