我想加快我的c ++项目的构建时间,我想知道我当前的结构是否会导致不必要的重新编译。
我有* .cc和相应的* .h文件,但我的所有* .cc文件都包含一个头文件,即main.h。
在main.h中,我包含了所有必需的和外部全局变量,并声明了我使用的函数。基本上,我没有使用任何名称空间。
这是一个糟糕的设计,可能导致不必要的重新编译和缓慢的构建?
答案 0 :(得分:3)
这取决于。如果很少修改main.h,则可以使用预编译头,这将大大缩短编译时间。 另一方面,如果经常使用main.h,那可能不是一个好的设计。
将所有内容放在一个包含文件中引入的另一个问题是它不会真正提升应用程序中的结构。在精心设计的应用程序中,您通常具有分层结构。通过将所有内容放在一个包含文件中,可以对应用程序中的结构进行模糊处理。这可能适用于一个小应用程序,但如果你的应用程序增长,你将有一天会有一个完整的意大利面,一切都取决于其他一切。
尝试将include文件拆分为多个部分。通常,每个类都有一个.cpp和一个.h文件。尝试在include文件中尽可能使用前向声明,并且只包括(在.h和.cpp中)真正需要的内容。
答案 1 :(得分:0)
这种设计肯定会导致构建时间变慢。启动构建时文件和IDE的作用是检查自上次编译以来哪些源(cc)文件已被修改。它还会检查是否修改了源文件所依赖的任何文件。源文件依赖于它包含的所有头文件,以及这些头文件包含的所有头文件等。如果它检测到任何修改,则它会重新编译该源文件。
由于您的设置意味着每个源文件都包含每个头文件,因此每当您修改单个头文件时,都需要重新编译每个源文件。
你肯定想尝试将事情分开一些并摆脱你的main.h文件。通常人们会尝试最小化头文件中包含的头文件的数量,并且更喜欢将包含保留在源文件中。