如果我创建一个包含许多子目录的项目,每个子目录对应一个特定模块,如A,B,C,D,E,F和可执行目标E1,E2,E3。每个模块对应于可执行目标使用的一个* .a。我的问题是如何生成模块和模块之间的依赖关系以及模块和可执行目标之间的依赖关系。也就是说,如果E1使用A的一个文件,那么E1应该依赖于A,因为我需要linke A.a来创建E1。
我应该如何设计我的Makefile来生成这种类型的依赖?谢谢,我是Makefile的新手。
答案 0 :(得分:0)
我假设你正在使用GNU Make。您应该定义一个“罐头配方”,它封装了从库到可执行文件的方式。配方应使用“自动变量”,以便它独立于特定文件。因为它只是一个配方,所以它被调试一次然后可以使用而没有进一步的错误。
然后编写规则,明确说明目标库和先决条件库。因为它是如此明确,它是高度防错的。然后你使用罐头食谱。如果你弄乱了先决条件,那么食谱就会抱怨。
以下是一个例子。
通常,除了库之外,您还有其他先决条件。例如,您应始终拥有使用的makefile列表。您可能还需要确保创建目标目录。这就是为什么在下面的配方中,我使用了过滤器。
请参阅GNU Make手册,了解此处无法解释的所有条款。
define recipe=
link $@ $(filter %.a, $^)
endef
E1: A.a (other prerequisites)
$(recipe)