我用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 clean
和make 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)。
答案 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)