Makefile 如何将依赖项添加到此头文件

Makefile 如何将依赖项添加到此头文件,makefile,g++,Makefile,G++,下面是六个不同程序的简单头文件。这个Makefile过去工作得很好,但后来我更改了程序以包含其他实现文件。此生成文件需要更改,以便在实现文件更改时,重新编译包含这些实现文件的文件 all: load list show add delete btree %: %.cpp g++ $< -g -o $@ all:加载列表显示添加删除树 %:%cpp g++$

下面是六个不同程序的简单头文件。这个Makefile过去工作得很好,但后来我更改了程序以包含其他实现文件。此生成文件需要更改,以便在实现文件更改时,重新编译包含这些实现文件的文件

all: load list show add delete btree
%: %.cpp
    g++ $< -g -o $@
all:加载列表显示添加删除树
%:%cpp
g++$<-g-o$@

您可以使用gcc的-MM选项创建依赖项文件,然后将这些文件包含到Makefile中

TARGETS = load list show add delete btree
all: $(TARGETS)
%: %.cpp
    g++ $< -g -o $@ -MM -MF $@.dd
    sed "s/$@\.o:/$@:/" $@.dd > $@.d
    -@rm $@.dd

DEPS=$(TARGETS:%=%.d)
-include $(DEPS)
TARGETS=加载列表显示添加删除树
全部:$(目标)
%:%cpp
g++$<-g-o$@-MM-MF$@.dd
sed“s/$@\.o:/$@:/”$@.dd>$@.d
-@$@.dd马来西亚令吉
DEPS=$(目标:%=%.d)
-包括美元(DEPS)

出现
sed
行以将依赖关系文件从
load.o:load.c
更改为
load:load.c

当我执行g++-MM list.cpp时,我得到以下输出:list.o:list.cpp bt.h insert.c btio.c btutil.c Lab2.cpp。那我该怎么办?它实际上不创建任何内容。您不需要直接运行它-%:%.cpp规则可以做到这一点。该规则将该行转换为一组.d文件,这些文件随后包含在生成文件
-MM
中,生成此输出,
-MF
将其重定向到文件中(以.dd结尾)。下一行运行
sed
进行轻微修改,并在
.d
中将其重命名。这些最后的
.d
文件包含在Makefile中,并告诉make哪个文件取决于哪个文件。当我运行make时,我得到以下错误:Makefile:4:**缺少分隔符。停止。你必须使用真正的制表符而不是空格来缩进命令。