Makefile make:缺少依赖项时使对象文件无效
我曾经重构过一些代码,并移动了一个include文件 尝试生成源树时产生错误: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/
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始终在这种情况下生成--始终生成标记makeIsmain.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