预编译的标题?我们真的需要它们吗?

时间:2009-07-16 15:09:44

标签: c++ c-preprocessor precompiled-headers

很久以前我曾经使用过预编译的标题:a。加快编译速度和b。因为我支持多种开发工具,如CodeWarrior,MPW,VS,ProjectBuilder,gcc,intel编译器等等。

现在我有一台带有32GB内存的Mac Pro。

现在我只使用CMake。

那么我们真的需要预先编译的标题吗?

我有没有看到/知道明显的好处?

如何制作跨平台的预编译标头?也许这会简化我的生活。

7 个答案:

答案 0 :(得分:17)

没有“足够快”的构建。 TDD(Test-Driven Development)的支持者如果他们的构建需要花费的时间超过几秒钟就会感到不安,因为它会使他们的开发风格变得更慢。

通过以正确的方式处理预编译的头文件,我已经处理了数小时编译时间的项目,我们减半(或更好),因此优势可能非常大,特别是对于忽略构建时间一段时间的项目。

然而,首选的解决方案仍然是编译时间永远不会失控,通过控制代码的物理依赖性。

有关详细信息,请参阅The Care and Feeding of Pre-compiled Headers

答案 1 :(得分:4)

我认为您的问题实际上取决于您正在编译的项目的大小。有一些非常大的项目,预编译的标题确实产生了巨大的差异。

所以,我的答案是:取决于......

但如果使用它们会让你的生活因某种原因而悲惨(即便携性)而你的项目并不是很大......我会说跳过它们。

答案 2 :(得分:3)

我总是把它关掉。在我参与的项目中,我遇到的问题多于对他们的好处。出现了许多微妙的错误,可以追溯到预编译的头文件,由于某种原因没有重新编译。也许它在目前的VS化身中更好。

答案 3 :(得分:3)

我今天决定尝试一下。 我使用Microsoft Visual C ++ 2010。

没有预编译的头文件,总编译时间为3.4秒。 使用预编译头文件,总编译时间为1.5秒。 所以对我来说,值得使用它。

预编译头包含很多boost和stl头文件和windows.h。 生成的预编译头文件(pch)文件的总大小为49Mbytes。

答案 4 :(得分:2)

唯一明显的好处是编译时间略有减少。我一般不使用它们。在我的大多数项目中,编译时间并不差(例如通常不到几分钟)。

除非你的项目很庞大,否则它们通常弊大于利。 (它们高度依赖于编译器。)

答案 5 :(得分:0)

预编译头文件的优点在于,庞大的系统库头文件和其他文件根本不需要每次构建时都不需要更改或不经常更改。

由于所有C编译器(我所知道的)单独处理每个.c文件,跳过包含的“已知”部分会对编译时间产生巨大影响。

它们也不是可移植性问题,您可以使用stdafx.h / cpp与GCC编译项目就好了,唯一的问题是编译时间可能会增加,因为并非每次编译都需要stdafx.h中的所有内容单元。

答案 6 :(得分:-1)

至少有两个原因使用预编译头仍然很有用:  
1)很多人没有拥有32 GB RAM的Mac Pro,幸运的是!  
2)这是一种限制包含在* .h中的方法
我知道制作跨平台预编译头的唯一方法是使用Qt及其跨平台项目文件:PRO文件!