我正在阅读Automatic Dependency Generation中的make manual,我无法弄清楚为什么需要此功能。我正在开展的项目和我从头开始编写的结构如下:
在makefile中,我将-I .
传递给编译器。当它遇到目录X中的.cpp文件时,它将在同一目录(或.
目录)中搜索.h文件。解析.h文件时,它将遇到相对于.
文件夹的包含,因此它将知道在哪里查找它们。
现在,为什么有人想要生成一个带有-M
标志的依赖项列表,并且如果代码可以像我上面描述的那样构造,那么就会产生一个模糊的.d文件(依赖项fie)。我没有看到从代码文件生成特定依赖项列表的重点。
答案 0 :(得分:4)
因为在实践中,每个源文件都依赖于多个头文件。如果每次更改任何标题时都不重新编译源文件,那么很可能最终会出现不一致的二进制文件。
答案 1 :(得分:1)
这就是makepp的工作原理。自动检测依赖关系。在您的情况下,您甚至不需要makefile(如果您不介意在命令中指定目标)。
内置链接器规则具有自动推导目标文件的功能。如果您说makepp proggie
,它将扫描proggie.c(或.cpp或您拥有的任何内容)的include语句。对于每个语句,它将查看是否存在可以构建的匹配.o文件,如果是,则以递归方式扫描。然后,以这种方式发现的所有.o文件都会被构建并链接在一起。
或者你的makefile可以是一个单行程序,以避免每次都指定目标:
$(phony all): proggie