在gcc中使用预编译头

在gcc中使用预编译头,gcc,precompiled-headers,Gcc,Precompiled Headers,我正在研究使用预编译头来减少编译时间 我已在此处阅读了有关该主题的文件,其中我阅读了以下内容: #ifdef USE_PRECOMPILED_HEADERS #include "stdafx.h" #else #include "dep1.h" #include "dep2.h" #endif 在特定编译中只能使用一个预编译头 对于我想改进构建时间的项目,通常会有很长的包含列表。上面的内容让我想到,为了获得最大的性能改进,我必须创建一个公共include集合,将它们放入单个头文件中,编译并包

我正在研究使用预编译头来减少编译时间

我已在此处阅读了有关该主题的文件,其中我阅读了以下内容:

#ifdef USE_PRECOMPILED_HEADERS 
#include "stdafx.h"
#else
#include "dep1.h"
#include "dep2.h"
#endif
在特定编译中只能使用一个预编译头

对于我想改进构建时间的项目,通常会有很长的包含列表。上面的内容让我想到,为了获得最大的性能改进,我必须创建一个公共include集合,将它们放入单个头文件中,编译并包含该头文件

另一方面,我更喜欢在特定的文件中明确列出我的依赖项,因此我倾向于首先包括预编译的头文件,然后是实际头文件的手动列表

我有两个与此相关的问题:

  • 我的分析和方法正确吗?我对这句话的解释正确吗

  • 为此,我将在许多地方使用这个文件(比如stdafx.h),从而包括我不需要的文件。但是,出于代码文档的目的,我想明确列出我的依赖项。 在这里,我需要执行以下操作:

    #ifdef USE_PRECOMPILED_HEADERS 
    #include "stdafx.h"
    #else
    #include "dep1.h"
    #include "dep2.h"
    #endif
    
    我可以定期运行没有预编译头的构建,以检查是否列出了所有依赖项。不过这有点笨重。有谁有更好的解决方案吗

  • 如果有人有信息可以帮助我们在调查中取得更好的结果,我很高兴听到他们

    以上让我想到,要获得最佳性能 改进后,我将不得不收集一些常见的 包括,将它们放入单个头文件中,编译并 包括该头文件

    是的,这个观察是正确的:您将大多数(全部?)包含放在一个头文件中,然后对其进行预编译

    这反过来意味着

    • 任何不借助预编译头的编译都需要时间
    • 您依靠命名约定或其他方式(文档?)在您的单个翻译单元中引用的内容与其声明之间建立信息链接

    由于这些原因,我不太喜欢预编译头

  • 是的,你的观察非常好! 您必须创建一个公共包含的集合,将它们放入单个头文件中,编译并包含该头文件“。此通用头文件通常命名为
    stdafx.h
    (尽管您可以随意命名!)

  • 恐怕我不太明白问题的这一部分

  • 编辑:

    是否还希望将标准头(如
    iostream
    map
    vector
    等)作为依赖项包含在代码文档中


    通常这必须是一个。因此,您必须只在
    stdafx.h
    中包含那些不受您控制的头文件(即,[1]标准语言包含[2]来自从属模块的包含(大部分是公开的接口头))。Rest all includes(其源代码位于当前项目/模块中)必须在需要时明确包含在每个头文件中,并且不得放入预编译的
    stdafx.h

    的可能副本中;请参阅与GCC 4.9相关的内容。谢谢您的信息。我做了一次编辑,希望能澄清第二个问题。