Make:自动生成依赖项

时间:2018-12-31 07:47:57

标签: makefile

我对使用Make自动生成依赖文件有一个疑问。 在这里,我的makefile具有以下内容。

DEPSALL := $(wildcard $(patsubst %,%.d,$(basename $(TGTFILES)/*.c)))
-include $(DEPSALL)
$(TGTFILES)/%.o: $(TGTFILES)/%.c
     mkdir -p $(@D)
     $(CC64) -MT $@ -MMD -MP -MF $(patsubst %,%.d,$(basename $@)) -o $(@) -c $(CFLAGS64) $<
...
...  

我是GNUmake的新手,正在尝试做一些实验。我知道,上面的-M *标志用于创建具有每个obj文件的目标和依赖关系的自动依赖文件“ * .d”。 在这里,在编译代码时,我只是注释掉了前两行,并且在编译代码时没有发现任何区别。不确定这些行如何影响我的编译。

在我的makefile中真的有必要包含这两行吗?没有'include'指令(-include $(DEPSALL))可以正常工作。

1 个答案:

答案 0 :(得分:0)

假设您已经完全构建了代码,那么当您运行make时,什么都不会发生,因为一切都是最新的。

现在假设您的一个源文件foo.c包含一个头文件bar.h。您编辑头文件bar.h,但不编辑源文件foo.c。出于本实验的目的,您可以使用touch bar.h来模拟编辑。

现在,如果您注释掉上面的前两行,则在运行make时,它将说不需要执行任何操作,并且即使重新编译了头文件,也无需重新编译任何内容。如果您没有注释掉上面的前两行,那么在运行make时,它将意识到标头已更改并重新编译源文件。

是这两行和所有-MT等选项的作用。