C++ 头文件和makefile如何帮助c++;?

C++ 头文件和makefile如何帮助c++;?,c++,makefile,compilation,header,incremental-compiler,C++,Makefile,Compilation,Header,Incremental Compiler,我理解增量编译是什么:当一个编译器只编译你编辑的代码,而不是全部。但是如何将代码分割成.h和.c/cc文件,以及C++中的MaxFrm帮助增量编译? 头文件实际上与编译的增量相反。对任何头文件的任何更改都将导致重新编译包含该头文件的所有源文件(甚至间接通过另一个头文件)。但是页眉使得在多个翻译单元之间保持所有定义的相同变得非常容易,这是语言所要求的,因此它们的使用几乎是必要的。这种反生产力是“只包括你需要的”是一个经验之谈的原因。 帮助增量编译的是每个翻译单元的定义更少。如果您在一个源文件中编写

我理解增量编译是什么:当一个编译器只编译你编辑的代码,而不是全部。但是如何将代码分割成.h和.c/cc文件,以及C++中的MaxFrm帮助增量编译? 头文件实际上与编译的增量相反。对任何头文件的任何更改都将导致重新编译包含该头文件的所有源文件(甚至间接通过另一个头文件)。但是页眉使得在多个翻译单元之间保持所有定义的相同变得非常容易,这是语言所要求的,因此它们的使用几乎是必要的。这种反生产力是“只包括你需要的”是一个经验之谈的原因。 帮助增量编译的是每个翻译单元的定义更少。如果您在一个源文件中编写整个程序,那么对程序的任何小部分所做的任何微小更改都会导致重新编译整个程序

如果您将每个函数都写入一个单独的源文件中,那么对其中任何一个函数的修改都将导致只需要重新编译该微小的源文件,然后将其与以前未修改的编译对象文件链接在一起。编译单个函数通常比编译整个程序快。尽管如此,如果更改是例如函数的参数,那么调用函数的所有内容(即其依赖项)也必须重新编译(因此,在这种情况下,更改位于头文件中,并且所有依赖项都必须包含头文件)

拥有多个源文件的另一个优点是,它们可以独立编译,因此可以并行编译,考虑到当今的多核处理器,更不用说拥有无数行计算机系统的数据中心了。但也有缺点:当有许多内联函数(尤其是包含所有模板的内联函数)时,从头开始的非增量编译通常更昂贵,需要为使用它们的每个单独的源文件重新编译这些函数

make和ninja等构建系统是一些工具,它们的其他功能包括跟踪以前编译的源文件,并在修改后决定哪些源文件需要重新编译。决策通常基于源文件(以及所有包含的文件)相对于其编译的目标文件的修改时间



这一切都适用于使用“哑”非增量编译器(这是大多数编译器),它需要一个构建工具来过滤所需的重新编译,并且其中没有任何增量逻辑。对于真正的增量编译器,可能不需要构建系统,甚至可能不需要翻译单元划分。

这很有帮助,因为编译器不需要考虑任何事情,因为编译器的所有思想都是由您来完成的。另外,只有少数集成的IDE/编译器真正实现了您所谓的“增量编译”。C++过于复杂,真正的增量编译非常难实现,很少有编译器真正做到这一点。通过使用多个翻译单元,只需比较.c/.h和目标文件的时间戳,构建系统就可以实现一个相当简单的实现,即只编译更改后的代码。谢谢!这让我明白了很多!你知道makefiles有什么帮助吗?