执行非递归制作的正确方法

Right way to do non-recursive make?

本文关键字:方法 递归 执行      更新时间:2023-10-16
关于

创建非递归制作系统的资源似乎只有少数,而且在我发现的资源中,我都无法弄清楚如何处理我的用例。我的层次结构如下所示:

project/
project/libA/...
project/libB/...
...
project/appA/...
project/appB/...

所以也许project/appA/makefile取决于libAlibBproject/appB/makefile取决于libAlibClibF或其他东西。我希望能够在每个目录中make并完成这项工作。我已经有一个递归解决方案。

所有资源始终定义一个根project/makefile,该根include其上方的所有目录。但我需要倒退。野外有没有这样的例子?我认为理想情况下,我希望给定的库制作文件如下所示:

include ../../rules.mk
SRC := $(wildcard src/*.cpp)
INCDIR := ./include
$(add_build_target)

。其中,基本 rules.mk 将定义add_build_target以附加给定SRC的正确规则,并将INCDIR附加到build。这是正确的方法吗?以及我如何实际编写add_build_target来添加正确的目标(所有 .cxx 的 .o( - 我尝试过的所有内容都给了我"没有规则来制作目标 whatever.o"问题,尽管我认为我已经定义了它们......

我已经实现并扩展了论文中的想法

http://sites.e-advies.nl/nonrecursive-make.html

在企业环境中多次出现,

无论在小型还是大型环境中,它们都能很好地工作。 基本上,那里实现了一个"目录堆栈"和递归包含。 就像我说的,对我来说效果很好。 阅读这篇论文,我推荐它。

看看我的非递归构建系统实现,称为prorab:https://github.com/cppfw/prorab

它允许完全实现您想要的。因此,您将在每个目录中appA, appB, libA, libB,...具有独立的makefile,如果您cd该目录,则只需键入make即可构建项目。在该生成文件中,你将能够包含来自另一个目录的生成文件,并在库二进制文件上为应用二进制文件添加依赖项。因此,这样,如果您对库代码进行一些更改并构建应用程序,它将检测到并重新生成库。然后也可以有一个顶级makefile,其中包括这些子目录中的所有makefile,用于构建所有内容。如果您需要有关使用 prorab 的帮助,请告诉我。