C++ 为什么';制作';当我更改一个文件时,是否重新编译多个文件?

C++ 为什么';制作';当我更改一个文件时,是否重新编译多个文件?,c++,makefile,C++,Makefile,当我编辑一个源文件时,运行是否会重新编译该文件以及该文件作为依赖项的所有文件?若然,原因为何 当我编辑一个源文件时,运行会重新编译该文件吗 加上依赖于该文件的所有文件?若然,原因为何 错误的makefile可能会发生这种情况(您还没有发布它的外观) 或者源文件包含模板的实现,并且包含在某个地方。如果该文件包含在其他文件中,那么可以合理地期望这些其他文件重新编译,因为您不希望程序的“一半”是新的,另一半是旧的。为什么? 因为这就是生成文件的全部目的。 如果修改了特定的源文件,则所有从属文件都应与修

当我编辑一个源文件时,运行是否会重新编译该文件以及该文件作为依赖项的所有文件?若然,原因为何

当我编辑一个源文件时,运行会重新编译该文件吗 加上依赖于该文件的所有文件?若然,原因为何

错误的makefile可能会发生这种情况(您还没有发布它的外观)

或者源文件包含模板的实现,并且包含在某个地方。

如果该文件包含在其他文件中,那么可以合理地期望这些其他文件重新编译,因为您不希望程序的“一半”是新的,另一半是旧的。

为什么?
因为这就是生成文件的全部目的。
如果修改了特定的源文件,则所有从属文件都应与修改后的文件一起重新编译,以便所有从属文件都引用相同的源,并且整个代码库都是同步的

怎么做?

make
实用程序检查时间戳以检查修改了哪些文件。创建make文件时,需要指定依赖规则,该规则明确告诉实用程序哪些其他文件依赖于特定文件。因此,使用这些规则Make也会编译所有依赖文件,以便生成的二进制文件引用相同的更新代码。

请发布一篇文章。回答问题时不可能看不到你在问什么。我认为,任何对make实用程序有很好理解的人都会发现答案是可能的。提供示例代码的目的是澄清并精确指定你在说什么。技术是一种微妙的东西;微小的差异可能产生巨大的后果。没有代表性的样本,回答者只能猜测您的特定makefile中发生了什么。你可能没有以最佳方式组织事情。你为什么反对?好吧,关于为什么,幽默我的例子。文件A包含对文件B中定义的函数的调用。因此,如果我只是在文件B中添加分号,make必须重新编译A,因为据make所知,A调用的函数签名可能已更改?@bbarre:可能。如果B.h是声明或定义函数的头文件,而a.cpp包含B.h,那么yes B.h应该是a.o的依赖项(或a,或a.exe,无论从a构建什么)。但是,如果B.cpp是一个定义函数的文件,而a.cpp在其他地方得到它的函数声明,那么如果您将a.cpp和B.cpp分别编译为a.o和B.o,那么B.cpp不必是a.o的依赖项。在这种情况下,a.o和B.o仍然是从它们生成的任何可执行文件的依赖项。因此,如果更改B.cpp而不使用B.h,则会重建B.o和exe,而A.o不会。