我希望我的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
答案 0 :(得分:0)
除了删除.d
文件外,您想要的行为是make的工作原理。我不知道你为什么要这样:这意味着每次make运行时都必须重建.d
文件才能判断对象文件是否过时:这会增加你的构建时间没有充分理由的话。
每次make rebuild任何包含的makefile时,它都会重新执行自己并从头开始读取makefile。因此,只要您不删除.d
文件,它就会按您的意愿运行。有关此功能的信息位于GNU make manual。
但是,这是管理依赖关系的次优方法。它工作但它比它需要的慢。一个更现代的解释&#34;可以找到处理此问题的方法here。