Makefile make:缺少依赖项时使对象文件无效

Makefile make:缺少依赖项时使对象文件无效,makefile,gnu-make,Makefile,Gnu Make,我曾经重构过一些代码,并移动了一个include文件 尝试生成源树时产生错误: make: *** No rule to make target `cmd/dispatcher.h', \ needed by `/tmp/test/dispatcher/main.o'. Stop. 如果执行makeclean(删除过期的main.o文件),然后重新生成,则会出现不同的错误: ...src/test/dispatcher/main.cpp:3:28: fatal error: cmd/

我曾经重构过一些代码,并移动了一个include文件

尝试生成源树时产生错误:

make: *** No rule to make target `cmd/dispatcher.h', \
    needed by `/tmp/test/dispatcher/main.o'.  Stop.
如果执行
makeclean
(删除过期的
main.o
文件),然后重新生成,则会出现不同的错误:

...src/test/dispatcher/main.cpp:3:28: fatal error: cmd/dispatcher.h: \
    No such file or directory
问题:


当它的一个依赖项丢失时,有没有办法使
main.o
无效?

make没有什么神奇之处。如果
main.o
依赖于
dispatcher.h
,那么它会被写入某个地方

我怀疑您的
Makefile
使用创建依赖项文件的
-MD
-MDD
选项运行
gcc
。它们通常以
.d
后缀命名。这些依赖项文件由
gcc
自动创建,作为Makefile内容:
target:dependencies

这些文件随后包含在主
Makefile
中,以提供完整的automagic依赖项


你应该查找这些
.d
文件并删除它们。

我不这么认为。但是您可以告诉makefile始终在这种情况下生成--始终生成标记makeIs
main.o
在您的生成中不再需要?@SagarSakre我想避免这种情况-如果
main.o
意识到缺少依赖项
cmd/dispatcher.h
,将导致
main.cpp
在不重建其余的world@Beta它是必需的-它是通过
main.cpp
cmd/dispatcher.h
main.o
之间的关系,我正试图找出
deps:=$(subst$(OBJ_DIR),$(DEP_DIR),$(subst.o,.d,$(OBJECTS))-包括$(deps)
抱歉-过早按enter键。。。我的依赖项自动生成如下:
deps:=$(subst$(OBJ\u DIR),$(DEP\u DIR),$(subst.o、.d、$(OBJECTS)))-包括$(deps)
。您是对的,旧文件列在
.d
文件中,我想我正在寻找一种方法使
.d
文件失效,从而rebuilt@SteveLorimer如果您的问题是由过时的gcc自动依赖项引起的,则附加的
-MP
选项将有助于您下次避免此问题。@SteveLorimer您的意思是您的依赖项按如下方式使用。这些行确实使用了
.d
依赖项文件。它们不会生成它们。检查gcc是否使用
-MD
选项运行,然后删除有问题的
.d
文件,然后运行
make
@DidierTrosset-demobiles,您当然是正确的。依赖项生成是使用
-MM
$(CXX)$(CFLAGS)$(CPPFLAGS)$(TARGET_ARCH)-MM-I.$<>$@
。我将查找
-MP
-MD