2013-10-13 67 views
0

如果我创建一个包含许多子目录并且每个对应一个特定模块(如A,B,C,D,E,F)和可执行目标E1,E2,E3 。每个模块对应于可执行目标使用的一个* .a。我的问题是如何生成模块和模块之间的依赖关系以及模块和可执行目标之间的依赖关系。也就是说,如果E1使用A的一个文件,那么E1应该依赖于A,因为我需要linke A.a来创建E1。
我应该如何设计我的Makefile来生成这种类型的依赖关系?谢谢,我是Makefile的新手。具有多个目录/模块依赖关系的Makefile

+0

你问过如何为E1编写规则,以便A.a是E1的前提条件? – Beta

+0

是的,但我希望自动生成这个规则,而不是自己写这个规则,以防我犯这个依赖关系的错误。那可能吗?或者我只想知道如何在包含多个库和可执行文件的大型项目中编写Makefiles,其中每个可执行文件都依赖于某些库。我认为手动编写这些依赖关系时会出错。谢谢 – user2875245

+0

这些依赖关系可以自动处理,但它很棘手。你在用什么语言?你有一个明智的命名约定(例如'A/A.a')吗? – Beta

回答

0

我假设你正在使用GNU Make。你应该定义一个“罐装食谱”,它封装你如何从库到可执行文件。配方应该使用“自动变量”,以便它独立于特定的文件。因为它只有一个配方,所以它被调试一次,然后可以使用而不会出现进一步的错误。

然后,您可以在明确声明目标库和必备库的位置编写规则。因为它非常明确,所以它具有很高的防错性。然后你使用罐装食谱。如果你搞砸了前提条件,配方会抱怨。

一个例子如下。

通常情况下,除了库之外,还有其他先决条件。例如,您应该始终使用所使用的makefile列表。您可能还需要确保创建目标的目录。这就是为什么在下面的配方中,我使用了过滤器。

请查阅GNU Make手册,了解所有在此未说明的术语。

define recipe= 
link [email protected] $(filter %.a, $^) 
endef 

E1: A.a (other prerequisites) 
    $(recipe)