执行非递归制作的正确方法
Right way to do non-recursive make?
创建非递归制作系统的资源似乎只有少数,而且在我发现的资源中,我都无法弄清楚如何处理我的用例。我的层次结构如下所示:
project/
project/libA/...
project/libB/...
...
project/appA/...
project/appB/...
所以也许project/appA/makefile
取决于libA
和libB
,project/appB/makefile
取决于libA
、libC
、libF
或其他东西。我希望能够在每个目录中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 的帮助,请告诉我。
- C++:正在检查LinkedList中的回文-递归方法-错误
- 数组元素打印的递归方法
- 如何在 c++ 的类中递归调用函数方法?
- 使用非递归插入方法实现 AVL 树
- 这是定义一组递归规则的正确方法吗?
- 退出c++中的递归void方法
- 我对 leetcode 72 上的递归方法感到茫然
- 使用递归方法遇到分段错误
- 转换循环以递归基本方法
- 我的链接列表反向递归方法的代码的问题是什么?
- 递归std ::函数定义模板类方法
- 在链接列表中找到值的递归方法
- 为什么非回归方法比递归需要更多的时间
- 是否有一种方法可以使此C 14递归模板在C 17中短
- Union-Find方法性能,迭代与递归
- 我应该如何实现递归方法以找到在C++中形成最大堆的多种方法
- 是否有对 Clang 递归 ASTVisitor 的最终访问方法
- 使用OpenMP并行化此递归的最佳方法
- 使用递归方法将矢量作为输入时进行分割故障
- 使用递归方法的类,使用int矢量元素作为输入