Dependencies 在make中更正自动生成的依赖项(来自gcc)

Dependencies 在make中更正自动生成的依赖项(来自gcc),dependencies,makefile,gnu-make,Dependencies,Makefile,Gnu Make,我有以下makefile(片段) 当更改src/socket.h(一个其他文件都依赖的文件)并运行make时,我希望它会重建整个项目,但它只发出一个操作 g++ -ggdb3 -ansi -Wall -Werror -pedantic-errors obj/area.o obj/avatar.o obj/board.o obj/socket.o -o ./game 我相信我正确地生成了自动依赖项,所以我感觉我没有正确地使用它们。我哪里出错了?我知道makefile:59:…错误是一个线索,但

我有以下makefile(片段)

当更改
src/socket.h
(一个其他文件都依赖的文件)并运行
make
时,我希望它会重建整个项目,但它只发出一个操作

g++ -ggdb3 -ansi -Wall -Werror -pedantic-errors obj/area.o obj/avatar.o obj/board.o obj/socket.o  -o ./game
我相信我正确地生成了自动依赖项,所以我感觉我没有正确地使用它们。我哪里出错了?我知道
makefile:59:…
错误是一个线索,但我以前从未处理过自动生成的依赖项


提前感谢;干杯

不幸的是,您的
*.d
文件没有得到它们的完全依赖关系;它们也依赖于所有的头文件。解决此问题的一种方法是在
%.d
指令中添加额外的一行:

# Dependency directives
$(DEP_DIR)/%.d: $(SRC_DIR)/%.cpp
  $(CPPC) -MM -MD $< -o $@
  sed -i 'p;s|$(OBJ_DIR)/\(.*\)\.o:|$(DEP_DIR)/\1.d:|' $@
#依赖项指令
$(副署长)/%.d:$(副署长)/%.cpp
$(CPPC)-MM-MD$<-o$@
sed-i'p;s |$(OBJ_DIR)/\(.*)\.o:|$(DEP_DIR)/\1.d:|'$@

如果
-i
吓到了你,你可以试试
海绵
(在我发行版的
moreutils
包中)。

谢谢你的提示-我实际上使用了
sed-i's | \(.*)\.o:|$(OBJ_DIR)/\1.o$(OBJ_DIR)/\1.d:|$@
。干杯
g++ -ggdb3 -ansi -Wall -Werror -pedantic-errors obj/area.o obj/avatar.o obj/board.o obj/socket.o  -o ./game
# Dependency directives
$(DEP_DIR)/%.d: $(SRC_DIR)/%.cpp
  $(CPPC) -MM -MD $< -o $@
  sed -i 'p;s|$(OBJ_DIR)/\(.*\)\.o:|$(DEP_DIR)/\1.d:|' $@