关于创建非递归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
是它上面的所有目录。但是我需要反向的。有没有这样的例子?我想理想的情况下,我希望给定的库makefile看起来像这样:
include ../../rules.mk
SRC := $(wildcard src/*.cpp)
INCDIR := ./include
$(add_build_target)
...其中,基础rules.mk将定义add_build_target
,以便将给定SRC
和INCDIR
的正确规则附加到build
。这是正确的方法吗?实际上,我如何编写add_build_target
来添加正确的目标(.o代表所有的.cxx)-我尝试过的所有方法都给了我“没有规则来使目标成为任何.o”的问题,尽管我认为我已经定义了它们......
2条答案
按热度按时间92dk7w1h1#
我已经实现并扩展了论文中的思想
http://sites.e-advies.nl/nonrecursive-make.html
在企业环境中的多种场合下,无论是在小型还是大型环境中,它们都运行得非常好。基本上,在那里实现了一个“目录堆栈”和递归包含。就像我说的,对我来说很好用。阅读这篇文章,我推荐它。
zbwhf8kr2#
看看我的非递归构建系统实现prorab:https://github.com/cppfw/prorab
它允许实现你想要的东西。所以,你将在每个目录
appA, appB, libA, libB,...
中拥有独立的makefile
,如果你将cd
添加到那个目录,你将能够通过输入make
来构建项目。在那个makefile中,你将能够包括来自另一个目录的makefile,并为你的应用二进制文件添加对库二进制文件的依赖。所以,这样,如果您对库代码做了一些更改并构建了应用程序,它将检测到这些更改并重建库。然后,还可以使用顶级makefile
,其中包含来自这些子目录的所有makefile,用于构建所有内容。如果您需要使用prorab的帮助,请告诉我。