As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center提供指导。




已关闭8年。




我在我的项目中使用(GNU)Make。我当前在每个目录中放置一个makefile,并使用SUBDIRS指定子目录。
有人向我建议,这不是使用make的理想方法,而是使用一个顶级make文件(或几个,使用include拆分)。过去,我曾尝试过迁移/使用此布局,但是在我看来,这没有必要太复杂。

使用递归makefile有哪些好处/缺点?

最佳答案

您应该记住的第一件事(只是为了消除任何误解)是我们不是在谈论单个或多个makefile。无论如何,在每个子目录中将makefile拆分为一个可能是个好主意。

递归生成文件很糟糕,主要是因为将依赖关系树划分为几棵树。这会阻止正确表达make实例之间的依赖关系。这也会导致依赖性树的一部分(部分)被重新计算,这最终是一个性能问题(尽管通常不是很大)。

为了正确使用单一制作方法,您需要使用一些技巧,尤其是当您具有大量代码库时:

首先,使用GNU make(我已经知道了)。 GNU make具有许多简化功能的特性,您不必担心兼容性。

其次,使用特定于目标的变量值。例如,这将允许您为不同的目标使用不同的CFLAGS值,而不是强制您在整个品牌中使用单个CFLAGS:

 main: CFLAGS=-O2
 lib: CFLAGS=-O2 -g

第三,确保在GNU make支持的最大范围内使用VPATH / vpath。

您还想确保没有同名的多个源文件。 VPATH的局限性之一是它不允许您具有特定于目标的VPATH定义,因此源文件的名称必须共存于单个“VPATH namespace ”中。

08-05 05:16