我可以随时创建依赖项文件并决定是否重建吗?

时间:2016-09-20 09:28:54

标签: makefile

我希望我的makefile能够自动创建依赖项文件,然后决定是否需要重建 在寻找一种方法时,我找到了以下解决方案:我将此行添加到我的makefile中:

-include $(OBJS:.o=.d)

以及构建.o文件的方法

%.o: %.cpp
    $(CC) $(CFLAGS) $(DEBUG) $<

我添加了

    $(CC) $(STD) -MM $< -o $*.d

如果我理解正确,每次.o文件都不存在时,它会忽略include并构建.o文件。稍后,如果我再次运行make,它会检查此.o文件的依赖项(他从.d文件中获取)并决定是否应该重建.o文件。 为此,一旦我构建了我的项目,我就必须保留所有这些.d文件。

我想要的是,每次遇到是否重建.o文件的决定时,它都会生成一个.d文件,专门用于此.o文件。根据这个.d文件,它将决定是否重建,并在完成时删除.d文件。

有没有办法实现这个目标?

我希望我表达了我的意愿。如果没有,这就是我想象的流程:

if (.o file doesn't exist): build it
otherwise: build a .d file  
           rebuild or do nothing (according to the .d file)  
           delete the .d file

1 个答案:

答案 0 :(得分:0)

除了删除.d文件外,您想要的行为是make的工作原理。我不知道你为什么要这样:这意味着每次make运行时都必须重建.d文件才能判断对象文件是否过时:这会增加你的构建时间没有充分理由的话。

每次make rebuild任何包含的makefile时,它都会重新执行自己并从头开始读取makefile。因此,只要您不删除.d文件,它就会按您的意愿运行。有关此功能的信息位于GNU make manual

但是,这是管理依赖关系的次优方法。它工作但它比它需要的慢。一个更现代的解释&#34;可以找到处理此问题的方法here