此makefile不更新目标文件

时间:2015-08-17 19:53:55

标签: c++ c++11 makefile

我用codeblocks项目生成了一个makefile(用c ++ 11编写),所以我可以使用Atom作为IDE。但是,当我改变头文件中的默认构造函数参数时,它不会更新目标文件,这真的很烦人。它只是再次链接现有的目标文件。但即使我对.cpp文件稍作更改,它也会重新编译对象,而不会识别头文件中的更改。我找到的唯一快速修复方法是手动删除目标文件,因此它真的会全新生成它。我目前经常更改的标题部分如下所示:

VRParticles(): VRParticles(123){}

整个makefile在这里可用(使用cbp2make生成):https://github.com/Pfeil/polyvr/blob/master/Makefile (请注意,我只是一个相当新的贡献者,不负责编程的方式;))

我主要使用makefile和其中一个命令:

make -j 3 build_debug
make debug

请注意,删除VRParticles.o或执行make cleanmake debug时,所有内容都会正常运行。

请注意,我对makefile的体验非常低。 makefile基本上是这样的(请记住上面完整版的链接):

OBJ_DEBUG = # all object files

build_debug: before_debug out_debug after_debug

debug: before_build build_debug after_build

out_debug: before_debug $(OBJ_DEBUG) $(DEP_DEBUG)
    $(LD) $(LIBDIR_DEBUG) -o $(OUT_DEBUG) $(OBJ_DEBUG)  $(LDFLAGS_DEBUG) $(LIB_DEBUG)

$(OBJDIR_DEBUG)/src/addons/Bullet/Particles/VRParticles.o: src/addons/Bullet/Particles/VRParticles.cpp
    $(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c src/addons/Bullet/Particles/VRParticles.cpp -o $(OBJDIR_DEBUG)/src/addons/Bullet/Particles/VRParticles.o

我真的很想提供更多信息,但我不知道还有什么重要的,所以请问你是否需要更多信息。我的问题基本上是我需要修改makefile(我猜这个文件包含问题)所以如果需要,目标文件会更新。无需重新编译所有内容。

我在Linux上(Ubuntu 14.04 LTS)。

1 个答案:

答案 0 :(得分:2)

如果我们查看VRParticles.o的依赖项:

VRParticles.o : src/addons/Bullet/Particles/VRParticles.cpp

您告诉make目标文件仅依赖于VRParticles.cpp。因此,当您更新VRParticles.h时,无关紧要 - 您从未将VRParticles.h列为依赖项!值得庆幸的是,gcc可以自动为您生成这些依赖项:

$(CC) $(other flag stuff) -MP -MMD -MF $(@:.o=.d) -o $@ -c $<

这将创建一个文件VRParticles.d,它将具有依赖项的make样式规则,在这种情况下类似于:

VRParticles.o : VRParticles.d

所以在这一点上,我们所需要的只是包括它们:

DEPENDENCY_FILES = $(....)
-include $(DEPENDENCY_FILES)