【发布时间】:2018-12-31 07:47:56
【问题描述】:
我对使用 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* 标志用于创建自动依赖文件“*.d”,其中包含每个 obj 文件的目标和依赖项。 在这里,在编译代码时,我只是注释掉了前两行,并且在编译代码时没有看到任何区别。不确定这些行对我的编译有何影响。
真的有必要在我的makefile中包含这两行吗?没有'include'指令(-include $(DEPSALL))它工作正常。
【问题讨论】:
-
如果您之前运行了相同的命令并且文件已经生成,那将起作用(但最终文件将包含过时的信息)。带有减号的
-include将默默地忽略任何丢失的文件。依赖项的目的是告诉 Make 何时重新制作某些东西;如果没有依赖文件,Make 会在您更改fnord.h时认为fnord.c是最新的,即使它们有依赖关系。 -
嗨,我之前没有运行过任何命令。我第一次运行没有这两行,依赖文件被创建并且工作正常。
标签: makefile