我正在研究使用预编译头来减少编译时间。
我在这里阅读了有关该主题的文档:https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html,其中我读了以下内容:
在特定编译中只能使用一个预编译头。
在我希望改进其构建时间的项目中,通常包含很长的列表。上面让我认为,为了获得最大的性能改进,我将不得不制作一个常见包含的集合,将它们放入一个Header文件中,编译并包含该Header文件。
另一方面,我更愿意明确列出特定文件中的依赖项,因此我倾向于先包含预编译的Header,然后是实际Header文件的Manual列表。
我有两个与此相关的问题:
我的分析和方法是否正确?我是否正确解释了该陈述?
这样做,我会在很多地方使用这个文件(比如stdafx.h),从而包含我不需要的文件。但是,出于代码文档的目的,我想明确列出我的依赖项。 我要做的事情如下:
#ifdef USE_PRECOMPILED_HEADERS
#include "stdafx.h"
#else
#include "dep1.h"
#include "dep2.h"
#endif
我可以定期运行没有预编译标头的构建,以检查是否列出了所有的依赖项。然而,这有点笨拙。有没有人有更好的解决方案?
如果有人有信息帮助我们在调查中获得更好的结果,我很高兴听到他们。
答案 0 :(得分:1)
是的,你的观察绝对没问题!
你"would have to make a collection of common includes, put them into a single Header file, compile and include that Header file"
。这个通用头文件通常命名为stdafx.h
(尽管你可以将它命名为任何你想要的名字!)
我恐怕不太明白这部分问题。
编辑:
您是否还希望标准标题(如iostream
,map
,vector
等)作为依赖项包含在代码文档中?
通常这必须是否。因此,您必须仅包括stdafx.h
中不受您控制的那些头文件(即,[1]标准语言包括[2]包括来自相关模块(主要是公开的接口头))。休息所有包含(其源位于当前项目/模块中)必须在任何需要的地方显式包含在每个头文件中,而不是放在预编译的stdafx.h
中。
答案 1 :(得分:0)
以上引导我认为要获得最佳性能 改进,我将不得不做一个共同的集合 包括,将它们放入一个Header文件,编译和 包括该头文件。
是的,这个观察是正确的:你把大多数(所有?)包含在一个单独的头文件中,然后进行预编译。
反过来,这意味着......
出于这些原因,我不太喜欢预编译的标题......