当前位置:  开发笔记 > 编程语言 > 正文

在GNU/Linux环境/工具链中,预编译头的优缺点是什么?

如何解决《在GNU/Linux环境/工具链中,预编译头的优缺点是什么?》经验,为你挑选了3个好方法。

预编译的标题似乎可以在大型项目中节省大量时间,但似乎也是一个有点陷阱的痛苦.

使用预编译头文件的优点和缺点是什么,特别是因为它适用于在Gnu/gcc/Linux环境中使用它们?



1> Norman Ramse..:

预编译头的唯一潜在好处是,如果构建太慢,预编译头可能会加快它们的速度.潜在的缺点:

更多Makefile依赖项以获得正确; 如果他们错了,你就快速建立错误的东西.不好.

原则上,并非每个头都可以预编译.(考虑在#include之前放一些#define.)那么gcc实际上哪些情况正确?你想要相信这个前沿功能多少钱?

如果您的构建足够快,则没有理由使用预编译头.如果您的构建太慢,我会考虑

购买速度更快的硬件,与工资相比便宜

使用像AT&T nmake这样的工具或类似ccache(Dirk正确),这两种工具都使用值得信赖的技术来避免重新编译.


实际上gcc很好地处理了PCH.如果在包含pch之前存在#define,则不使用pch并使用普通包含.您可能还想考虑更新自己,PCH现在已经在gcc中存在了大约五年,并且不再是最前沿的.

2> quamrana..:

我无法与GNU/gcc/linux交谈,但我已经在vs2005中处理了预编译的头文件:

优点:

当您拥有许多模块包含的大标头时,可以节省编译时间.

适用于不经常更改的标题(例如来自第三方).

缺点:

如果将它们用于变化很大的标题,则会增加编译时间.

可以很好地设置和维护.

如果您不强制编译预编译的头,则有时会明显忽略对标头的更改.


尽管如此,支持和利弊也适用于gcc.

3> Dirk Eddelbu..:

该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倍.


-1:我不确定这与预编译的头文件有什么关系.
这与预编译头文件无关.
我确定你对'ccache`是正确的,它用在我工作的项目上,所以如果你回答'哪个是更好的预编译头文件或者ccache?'这样的问题,你的答案可能会很好,或者"有没有替代预编译的标题来加速编译?".但不是这个问题.
老实说,即使它没有回答具体问题,我认为*也是相关的.
@Martin:它只是渲染预编译的头文件没用.即使没有预编译的头文件,也可以加快编译速度.
废话.我避免重新编译,这很好,但有些不同.在单个项目中,如果您的构建系统中等,它通常会为您节省__nothing__.PCH本身可以加快编译速度.
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有