繁体   English   中英

自动依赖生成

[英]Automatic Dependency Generation

我正在阅读制作手册中的“ 自动依赖项生成” ,但不知道为什么需要此功能。 我正在研究并从头开始编写的项目的结构如下:

  • 每个单元(库)都有自己的文件夹
  • 每个.cpp文件应包括一个来自同一目录的同名.h文件。 好的,此规则可能有点过于严格,例如在循环依赖的情况下,在这种情况下,我可能会包含另一个.h文件,就像下一条规则中所述
  • 当在.h文件中包含其他头文件时,如果依赖项位于另一个单元(库)中,则始终使用相对于项目根目录的路径。 否则,只需添加文件名即可。

在生成文件中,我传递-I . 到编译器。 当它在目录X中遇到.cpp文件时,它将在同一目录(或.目录)中搜索.h文件。 解析.h文件时,它将遇到相对于的包含. 文件夹,因此它将知道在哪里寻找它们。

现在,如果代码可以像我上面描述的那样结构化,为什么有人会生成带有-M标志的依赖项列表并与sed混淆以生成晦涩的.d文件(依赖项文件)? 我看不出从代码文件生成依赖关系的特定列表的意义。

因为实际上,每个源文件都将依赖于多个头文件。 如果您没有在每次这些标头更改时都重新编译源文件,则很有可能会导致二进制文件不一致。

这就是makepp的工作方式。 依赖关系会自动检测。 在您的情况下,您甚至不需要makefile(如果您不介意在命令中指定目标)。

内置链接器规则具有自动推导目标文件的优点。 如果您说makepp proggie ,它将扫描proggie.c(或.cpp或您拥有的任何文件)以查找包含语句。 对于每个语句,它将查看是否可以构建匹配的.o文件,如果是,则以递归方式对其进行扫描。 然后,将以这种方式发现的所有.o文件构建并链接在一起。

或者,您的makefile可能只是一个衬里,以避免每次都指定目标:

$(phony all): proggie

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM