递归gmake问题

发布于 2024-07-30 00:15:40 字数 522 浏览 2 评论 0原文

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

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

我通过查看 gmake 手册< /a>

.PHONY: all clean dirs $(DIRS)

dirs: $(DIRS)

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

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

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

感谢您的帮助。

I need to write a quick makefile for building all my projects. This is C++ code and I am using gmake.

Say I have a list of directories, I want to cd to each, issue gmake command and if it succeeds, go to the next one and so on.

I cooked this by looking at the gmake manual

.PHONY: all clean dirs $(DIRS)

dirs: $(DIRS)

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

It works for the "all" target - if I just type gmake, it does the right thing. But if I do gmake clean it does nothing.

I am learning gmake as I go, so I am certainly doing something silly here :)

Thanks for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

和我恋爱吧 2024-08-06 00:15:40

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

例如:

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

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

In order to recursively make something other than the first target (I'm guessing all is your first target), you need to give the sub-make an idea of what to build. You can do so with the MAKEFLAGS and MAKECMDGOALS variables.

For example:

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

Your rule was not passing along the target names, e.g. clean, so the sub-make had no work to do (since all was already built).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文