论坛首页 编程语言技术论坛

C++编译时间、PCH、stdafx.h

浏览 4552 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-03-31  
C++
这段时间集中解决了一个stdafx的问题, 一点零散总结

  预编译头文件(扩展名为.PCH)是把一个工程中较稳定的代码预先编译好放在一 个中间形式的文件中(PCH文件),编译器可以更加快捷的使用这个文件,减少编译时间。预先编译好的代码可以是任何的C/C++代码。

预编译头文件的目的就是提高编译速度。编译器以文件为单位编译,如果修改了一工程中的一个文件则所有文件都要重新编译,包括头文件里的所有东西。在比较大的C/C++程序中,这些头文件中所包括的东西往往很大,编译时间很长。其中一部分头文件不常被修改,为了减少因为修改A文件而去编译没有任何修改的B头文件,将B头文件加入PCH文件中,避免重复编译。

一般情况下,预编译头文件使用stdafx.h和stdafx.cpp;当然也可以用其他的文件名。具体方法如下:
1. 在项目属性中定义Create/Use Precompiled Header: Use Precompiled Header(/Yu),并指定Create/Use PCH Through File 为 stdafx.h
2. 修改stdafx.cpp的编译属性,Create/Use Precompiled Header: Create Precompiled Header (/Yc), Create/Use PCH Through File 指定为stdafx.h。

预编译头文件应当只include大的并且影响编译速度的头文件。最典型的就是windows.h,还包括STL头文件。 自己编写的的头文件一般来说不应当被include在stdafx.h中,因为变化很频繁。例外情况是,某些头文件基本稳定而且在很多文件中被include。

#define of WIN32_LEAN_AND_MEAN。WIN32_LEAN_AND_MEAN的目的就是减少Windows.h以及其所包含的头文件中那些老版本的,不常用的部分。

将source文件(特别是大量的小文件)用include指令合并到少量的几个文件,然后编译这个文件会减少编译时间。

预编译代码:
自动预编译和手动预编译:http://msdn.microsoft.com/en-us/library/2yzw0wyd%28vs.71%29.aspx








   发表时间:2010-04-04  
没有提pch一定要在第一行include。。。
没有提pch什么时候速度提高最大。。。
某些东西用了pch和没用编译速度没什么区别,有些则是本质区别。

我的经验是有模版的时候用pch会快很多。像boost,gtkmm这种库。
0 请登录后投票
   发表时间:2010-04-04  
mikeandmore 写道
没有提pch一定要在第一行include。。。
没有提pch什么时候速度提高最大。。。
某些东西用了pch和没用编译速度没什么区别,有些则是本质区别。
我的经验是有模版的时候用pch会快很多。像boost,gtkmm这种库。

谢谢楼上提醒::D
1. 在第一行#include "stdafx.h"是必须的,编译器也会报错
2. 一般都是对于长期不变的,频繁include的头文件添加到PCH中,其他的不应该放到里面,boost肯定是很好的例子。

0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics