c++ 做非递归make的正确方法?

juud5qan  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(180)

关于创建非递归make系统的资源似乎很少,而且在我找到的资源中,没有一个能让我弄清楚如何处理我的用例。

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

所以可能project/appA/makefile依赖于libAlibBproject/appB/makefile依赖于libAlibC,和libF,我希望能够在每个目录中使用make,我已经有了一个递归的解决方案。
所有的资源总是定义一个根目录project/makefileinclude是它上面的所有目录。但是我需要反向的。有没有这样的例子?我想理想的情况下,我希望给定的库makefile看起来像这样:

include ../../rules.mk

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

$(add_build_target)

...其中,基础rules.mk将定义add_build_target,以便将给定SRCINCDIR的正确规则附加到build。这是正确的方法吗?实际上,我如何编写add_build_target来添加正确的目标(.o代表所有的.cxx)-我尝试过的所有方法都给了我“没有规则来使目标成为任何.o”的问题,尽管我认为我已经定义了它们......

92dk7w1h

92dk7w1h1#

我已经实现并扩展了论文中的思想
http://sites.e-advies.nl/nonrecursive-make.html
在企业环境中的多种场合下,无论是在小型还是大型环境中,它们都运行得非常好。基本上,在那里实现了一个“目录堆栈”和递归包含。就像我说的,对我来说很好用。阅读这篇文章,我推荐它。

zbwhf8kr

zbwhf8kr2#

看看我的非递归构建系统实现prorabhttps://github.com/cppfw/prorab
它允许实现你想要的东西。所以,你将在每个目录appA, appB, libA, libB,...中拥有独立的makefile,如果你将cd添加到那个目录,你将能够通过输入make来构建项目。在那个makefile中,你将能够包括来自另一个目录的makefile,并为你的应用二进制文件添加对库二进制文件的依赖。所以,这样,如果您对库代码做了一些更改并构建了应用程序,它将检测到这些更改并重建库。然后,还可以使用顶级makefile,其中包含来自这些子目录的所有makefile,用于构建所有内容。如果您需要使用prorab的帮助,请告诉我。

相关问题