2014-09-26 49 views
2

在创建一个非递归make系统时似乎只有少数资源,而在我找到的那些资源中,我都不知道如何处理我的用例。我的层次结构是这样的:正确的方式做非递归使?

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

所以也许project/appA/makefile取决于libAlibBproject/appB/makefile取决于libAlibClibF什么的。我希望能够在每个目录中都能够使用make并完成这项工作。我已经有了一个递归解决方案。

所有的资源总是定义一个根project/makefileinclude上面的所有目录。但我需要倒退。有没有这样的例子?我想,最好我想定库生成文件看起来像:

include ../../rules.mk 

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

$(add_build_target) 

...其中基础rules.mk将定义add_build_target为给定SRCINCDIR正确的规则追加到build。这是正确的方法吗?我怎样才能真正写出add_build_target来添加正确的目标(.o的所有.cxx的) - 我试过的所有东西都给了我“没有规则来制定任何目标的问题”,尽管我认为我已经定义了它们....

+0

+1 - 尝试CMake,它非常易于使用! – St0fF 2014-09-26 22:46:41

+0

@OliverCharlesworth你如何处理自动书写工具的特殊情况?通过手写Makefiles,这非常简单:只需在文件末尾添加特殊案例的名称和源代码,然后粘贴shell命令,在此之后生成特殊案例。与您在终端中实际输入的距离很小。 – 2014-09-26 22:52:06

+0

@MichaelGrünewald:我用CMake等做了很长的一段时间,所以我不能告诉你;)我对Make有点冒犯的是,40年过去了,每个人都必须重新创建基础设施(在一个怪诞的语法)每次。 – 2014-09-26 22:59:37

回答

1

我已经实现从纸

http://evbergen.home.xs4all.nl/nonrecursive-make.html

在企业环境中多个场合延长的想法,他们的工作非常出色,在小规模或大规模的环境。基本上,这里实现了“目录堆栈”和递归包含。就像我说的,对我来说效果很好。阅读这篇文章,我推荐它。

0

看一看我叫prorab非递归构建系统实现: https://github.com/igagis/prorab

它可以达到你想要什么。因此,您将在每个目录appA, appB, libA, libB,...中拥有独立的makefile,如果您的目录为cd,则只需键入make即可构建项目。在该makefile中,您将能够包含来自其他目录的makefile,并为库二进制文件的应用程序二进制文件添加依赖项。因此,如果您对库代码进行了一些更改并构建应用程序,它将检测到并重建库。 然后,也可以使用顶级makefile,其中包含来自这些子目录的所有生成文件,用于构建所有内容。 让我知道如果您需要帮助使用prorab