0

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

4

1 回答 1

0

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

然后,您可以在明确声明目标库和先决条件库的地方编写规则。因为它是如此明确,所以它是高度防错的。然后你使用罐头食谱。如果你搞砸了先决条件行,配方会抱怨。

下面是一个例子。

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

有关此处未解释的所有术语,请查阅 GNU Make 手册。

define recipe=
link $@ $(filter %.a, $^)
endef

E1: A.a (other prerequisites)
    $(recipe)
于 2013-10-14T04:09:37.437 回答