Dependencies 需要一个可以处理丢失文件的makefile依赖项规则

Dependencies 需要一个可以处理丢失文件的makefile依赖项规则,dependencies,makefile,gnu-make,Dependencies,Makefile,Gnu Make,我们的系统使用GNU Make。在makefile的末尾,我们有一个名为Makedepends的include,它使用gcc上的-MM开关生成一组.d文件。然后,我们使用include$(cxfiles:.cc=.d)行为每个.cc文件包含.d文件。但是,当我们删除文件或移动文件时,依赖项步骤中断,我们必须手动删除.d文件(即使是makeclean也无法工作,因为依赖项失败) 有没有办法生成这些dependency.d文件,或者包含这些dependency.d文件,以便优雅地处理文件删除或重新定

我们的系统使用GNU Make。在makefile的末尾,我们有一个名为Makedepends的include,它使用gcc上的-MM开关生成一组.d文件。然后,我们使用include$(cxfiles:.cc=.d)行为每个.cc文件包含.d文件。但是,当我们删除文件或移动文件时,依赖项步骤中断,我们必须手动删除.d文件(即使是makeclean也无法工作,因为依赖项失败)

有没有办法生成这些dependency.d文件,或者包含这些dependency.d文件,以便优雅地处理文件删除或重新定位

编辑:例如:我有serial.cc,makefiles生成了一个serial.d文件,该文件依赖于buffer.h,但是我修改了它,所以我不再需要buffer.h,我删除了buffer.h。下次我运行make时,它将阻塞,因为它包含.d文件,这仍然使serial.o依赖于buffer.h。

有两种可能:

首先,能否向Makefile中添加规则以运行依赖项步骤:

.SUFFIXES: .d

%.d::
   makedepend_command_here
如果没有,则从GNU Make的
信息
页面的
最后一招
部分:

例如,在测试 makefile,您可能不关心 源文件仅包含真实数据 他们的存在。那你就可以了 这:

使所需的所有源文件 (作为先决条件)要创建的 自动地

这能为您创建空的
.d
文件吗?

描述了这个确切的问题,并介绍了几种解决方法。第一个选项有点误导,但“高级”基本上是正确的。

如果与选项
--rm stale
一起使用,它将注意到不再可构建的文件并将其删除。如果这是您的正常用例,您可以将该选项放入构建树根目录下的
.makepprc
,并且它将始终被使用

当然,makepp本身就可以处理所有这些依赖项检测,所以您不需要把makefile弄得乱七八糟。它甚至比您的方法更好,因为它可以及时生成所需的头,以便编译器拾取,
gcc-MM
将失败


还有很多事情要做。除了做GNU make所能做的几乎所有事情外,还有很多有用的事情,您甚至可以通过一些Perl编程来扩展make文件。

不是缺少.d文件,而是如果删除.cc文件,相应的.d文件仍然挂在上一个make上,它将导致make失败,因为它依赖于.c文件。然后我推荐wnoise的链接:正如他所说,滚动第一部分到“有用”部分。请尝试“信息制作”或找到一本关于制作的好书,以获取详细信息和示例。你永远不会“完成”学习制造。。。总有另一颗宝石!祝你好运上面的“autodep.html”链接使用sed脚本处理删除/丢失的标题。一个更简单的解决方案是使用GCC的“-MP”开关。该链接现在重定向到:我在这里发布更新的链接,以防重定向中断。
 %::
         touch $@