Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 此生成文件不更新对象文件_C++_C++11_Makefile - Fatal编程技术网

C++ 此生成文件不更新对象文件

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

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

VRParticles(): VRParticles(123){}
整个makefile在此处可用(使用cbp2make生成): (请注意,我只是一个相当新的贡献者,不对编程方式负责;)

我主要通过以下两个命令之一使用makefile:

make -j 3 build_debug
make debug
请注意,当我删除VRParticles.o或执行
makeclean
makedebug
时,一切都可以正常编译

请注意,我使用makefiles的经验非常少。makefile基本上是这样工作的(记住上面完整版本的链接):

我真的很想提供更多信息,但我不知道还有什么是重要的,所以请询问您是否需要更多信息。我的问题基本上是我需要如何修改makefile(我猜这个文件包含这个问题),以便在需要时更新对象文件。没有重新编译所有内容


我使用的是Linux(Ubuntu14.04 LTS)。

如果我们查看您对
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 $<
因此,在这一点上,我们只需要将它们包括在内:

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

我已经尝试将头文件添加为依赖项,它确实得到了重建,但更改无法识别。例如,我将构造函数参数从123更改为400,但编译后只生成123个粒子。所以仅仅将其添加为依赖项是不够的,对吗?关于您的解决方案:我不确定如何使用gcc的行。我是否只是将这些标志添加到现有的标志中?或者我需要在每个目标中增加一行吗?@verpfelt您想重新构造makefile,这样您就有一个规则来构建所有对象文件。是的,一个gcc行将同时生成.o和.d文件。
VRParticles.o : VRParticles.d
DEPENDENCY_FILES = $(....)
-include $(DEPENDENCY_FILES)