很久以前,我曾经使用预编译的头文件:a。加速编译和 b. 因为我支持多种开发工具,如 CodeWarrior、MPW、VS、ProjectBuilder、gcc、intel 编译器等。
现在我有一台 32GB 内存的 Mac Pro。
现在我只使用 CMake。
那么我们真的需要预编译的头文件了吗?
有没有我看不到/不知道的明显好处?
如何制作跨平台的预编译头文件?也许这也会简化我的生活。
很久以前,我曾经使用预编译的头文件:a。加速编译和 b. 因为我支持多种开发工具,如 CodeWarrior、MPW、VS、ProjectBuilder、gcc、intel 编译器等。
现在我有一台 32GB 内存的 Mac Pro。
现在我只使用 CMake。
那么我们真的需要预编译的头文件了吗?
有没有我看不到/不知道的明显好处?
如何制作跨平台的预编译头文件?也许这也会简化我的生活。
没有“足够快”的构建这样的东西。如果他们的构建时间超过几秒钟,TDD(测试驱动开发)的支持者会感到不安,因为这会使他们的开发风格的转变慢得多。
我曾在编译时间减半(或更好)的项目上工作,通过正确使用预编译头文件,因此收益可能非常大,特别是对于一段时间忽略构建时间的项目。
然而,首选的解决方案仍然是通过控制代码的物理依赖关系,编译时间永远不会失控。
欲了解更多信息,请阅读预编译头文件的维护和提供
我认为您的问题实际上取决于您正在编译的项目的大小。有一些非常大的项目,预编译的头文件确实会产生巨大的影响。
所以,我的回答是:这取决于..
但是,如果由于某种原因(即可移植性)使用它们使您的生活变得痛苦,并且您的项目并不是非常大..我会说跳过它们。
唯一明显的好处是编译时间略有减少。我一般不使用它们。在我的大多数项目中,编译时间并没有那么糟糕(例如通常不到几分钟)。
除非您的项目很大,否则它们通常弊大于利。(它们高度依赖于编译器。)
我决定今天试试。我使用 Microsoft Visual C++ 2010。
没有预编译头,总编译时间3.4s。使用预编译头文件,总编译时间 1.5s。所以对我来说,值得使用它。
预编译头文件包含很多 boost 和 stl 头文件和 windows.h。生成的预编译头文件 (pch) 文件的总大小为 49Mbytes。
我总是把它关掉。在我从事的项目中,我遇到的问题多于他们的好处。出现了许多微妙的错误,这些错误可以追溯到由于某种原因没有重新编译的预编译头文件。也许在当前的 VS 化身中会更好。
预编译头文件的优点是巨大的系统库头文件和其他根本不更改或不经常更改的文件每次构建只需解析一次。
由于所有 C 编译器(我所知道的)都单独处理每个 .c 文件,因此跳过包含的“已知”部分会对编译时间产生巨大影响。
它们也不是可移植性问题,您可以使用带有 GCC 的 stdafx.h/cpp 编译项目就好了,唯一的问题是编译时间可能会增加,因为并非每个编译单元都需要 stdafx.h 中的所有内容。
使用预编译头文件仍然很有用,至少有两个原因:
1)很多人没有 32 GB RAM 的 Mac Pro,幸运的人!
2) 这是一种限制包含在 *.h 中
的方法 我知道制作跨平台预编译头文件的唯一方法是使用 Qt 及其跨平台项目文件:PRO 文件!