预编译的标题似乎可以在大型项目中节省大量时间,但似乎也是一个有点陷阱的痛苦.
使用预编译头文件的优点和缺点是什么,特别是因为它适用于在Gnu/gcc/Linux环境中使用它们?
预编译头的唯一潜在好处是,如果构建太慢,预编译头可能会加快它们的速度.潜在的缺点:
更多Makefile依赖项以获得正确; 如果他们错了,你就快速建立错误的东西.不好.
原则上,并非每个头都可以预编译.(考虑在#include之前放一些#define.)那么gcc实际上哪些情况正确?你想要相信这个前沿功能多少钱?
如果您的构建足够快,则没有理由使用预编译头.如果您的构建太慢,我会考虑
购买速度更快的硬件,与工资相比便宜
使用像AT&T nmake这样的工具或类似ccache(Dirk正确),这两种工具都使用值得信赖的技术来避免重新编译.
我无法与GNU/gcc/linux交谈,但我已经在vs2005中处理了预编译的头文件:
优点:
当您拥有许多模块包含的大标头时,可以节省编译时间.
适用于不经常更改的标题(例如来自第三方).
缺点:
如果将它们用于变化很大的标题,则会增加编译时间.
可以很好地设置和维护.
如果您不强制编译预编译的头,则有时会明显忽略对标头的更改.
该ccache的缓存前端到GCC,G ++,gfortran,......我的伟大工程.正如其网站所说
ccache是一个编译器缓存.它充当C/C++编译器的缓存预处理器,使用-E编译器开关和哈希来检测何时可以从缓存中满足编译.这通常会导致常见编译速度提高5到10倍.
在Debian/Ubuntu的,只是做" apt-get install ccache
"和创造,比如说软链接,/usr/local/bin
其名称gcc
,g++
,gfortran
,c++
,...这点/usr/bin/ccache
.
[ 编辑 ]为了使这一点更明确以回应一些早期的评论:这通过缓存更大的编译步骤块来提供基本上预编译的头和源.因此它使用类似于预编译头的想法,并进一步进行.加速可能是戏剧性的 - 如网站所说,是5到10倍.