2

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

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

我通过查看gmake 手册做了这个

.PHONY: all clean dirs $(DIRS)

dirs: $(DIRS)

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

它适用于“所有”目标 - 如果我只输入 gmake,它会做正确的事情。但是如果我做 gmake clean 它什么都不做。

我边走边学 gmake,所以我肯定在这里做一些愚蠢的事情:)

谢谢你的帮助。

4

1 回答 1

8

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

例如:

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

您的规则没有传递目标名称,例如干净,因此子制作没有工作要做(因为所有内容都已构建)。

于 2009-08-07T16:03:17.003 回答