【问题标题】:C++ Single Header File StructureC++ 单头文件结构
【发布时间】:2010-08-28 21:30:03
【问题描述】:
我想加快我的 c++ 项目的构建时间,我想知道我当前的结构是否会导致不必要的重新编译。
我有 *.cc 和相应的 *.h 文件,但我所有的 *.cc 文件都包含一个单独的头文件,即 main.h。
在 main.h 中,我包含所有必要的和外部全局变量并声明我使用的函数。基本上,我没有使用任何命名空间。
这是一个糟糕的设计,会导致不必要的重新编译和缓慢的构建吗?
【问题讨论】:
标签:
c++
namespaces
build
header
【解决方案1】:
这取决于。如果 main.h 很少被修改,你可以使用预编译的头文件,这将大大缩短编译时间。
另一方面,如果经常使用 main.h,它可能不是一个好的设计。
将所有内容放在一个包含文件中带来的另一个问题是它并不能真正提升应用程序的结构。在精心设计的应用程序中,您通常具有分层结构。通过将所有内容放在一个包含文件中,您可以混淆应用程序中的结构。这可能适用于小型应用程序,但如果您的应用程序增长,您最终会得到一个完整的意大利面条,其中一切都取决于其他一切。
尝试将包含文件拆分为多个部分。通常每个类都有一个 .cpp 和一个 .h 文件。尽量在包含文件中使用前向声明,并且只包含(在 .h 和 .cpp 中)真正需要的内容。
【解决方案2】:
这种设计肯定会导致构建时间变慢。当您开始构建时,make 文件和 IDE 所做的是检查自您上次编译以来哪些源 (cc) 文件已被修改。它还检查源文件依赖的任何文件是否已被修改。源文件依赖于它包含的所有头文件,以及这些头文件包含的所有头文件等。如果它检测到任何修改,则重新编译该源文件。
由于您的设置意味着每个源文件都包含每个头文件,因此无论何时修改甚至是单个头文件,您都需要重新编译每个源文件。
您肯定会想尝试更多地分离事物并摆脱您的 main.h 文件。通常人们会尽量减少头文件中包含的头文件的数量,顺便说一下,更喜欢将包含的内容保留在源文件中。