漫漫开发路PCH:提升大型工程编译速度的利器( 二 )


5.下载并安装DirectXSDK 。 这个SDK对于编译Irrlicht工程来说 , 是必须用用到的 。
5.1为了避免出现错误 , 你可能需要在安装DirectXSDK之前先卸载MicrosoftVisualC++2010x86Redistributable和MicrosoftVisualC++2010x64Redistributable 。 你可以在Windows10的添加和删除程序中执行卸载操作 , 这两个组件会在安装DirectXSDK时重新被安装到系统中 。
6.获取Irrlicht的一份完整编译的追踪信息 。 在工程的根目录 , 执行如下指令:
【漫漫开发路PCH:提升大型工程编译速度的利器】6.1vcperf/startIrrlicht 。 这条指令将会启动编译信息收集 。
6.2msbuild/m/p:Platform=x64/p:Configuration=Release.sourceIrrlichtIrrlicht15.0.sln/t:Rebuild/p:BuildInParallel=true 。 这条指令将会对Irrlicht工程进行重新编译 。
6.3vcperf/stopIrrlichtirrlicht.etl 。 这条指令将收集到的编译信息保存到irrlicht.etl这个文件中 。
7.在WPA中打开编译追踪信息 。
如下图所示的 , 我们打开了BuildExplorer和Files视图 。 BuildExplorer视图显示了整个编译时间为57秒 , 这一点可以在下图中的视图底部的时间轴看出来(下图中的A) 。
Files视图则显示了耗费了最多扫描时间的头文件 , 它们分别是Windows.h和irrAllocator.h(下图中的B) 。 它们分别被扫描了45次和217次 。
漫漫开发路PCH:提升大型工程编译速度的利器
文章图片
在下图中 , 我们可以看到这些头文件是在哪些文件中被包含的 , 它们显示在Files视图的IncludedBy字段 。
漫漫开发路PCH:提升大型工程编译速度的利器
文章图片
创建PCH
首先 , 我们在工程的根目录下创建一个pch.h的文件 。 这个头文件将包含我们需要放入到预编译中的头文件 , 然后会被Irrlicht工程中的所有的C或者C++源文件所包含 。 当编译C++时 , 我们只会添加irrAllocator.h , 因为它不兼容C 。 如下图所示:
漫漫开发路PCH:提升大型工程编译速度的利器
文章图片
PCH在使用之前必须被编译过一次 。 因为Irrlicht工程包含C和C++这两种文件 , 所以我们需要创建两个版本的PCH文件 。 通过在工程的根目录下添加pch-cpp.cpp和pch-c.c这两个源文件 , 我们就可以创建这两个版本的PCH 。 这两个源文件只会包含我们之前创建好的pch.h头文件 。 如下图所示:
漫漫开发路PCH:提升大型工程编译速度的利器
文章图片
在VisualStudio中 , 我们需要修改pch-cpp.cpp和pch-c.c这两个头文件的PrecompiledHeaders属性的值 , 这会告诉VisualStudio创建两个不同版本的PCH文件 。 如下图所示:
漫漫开发路PCH:提升大型工程编译速度的利器
文章图片
然后 , 我们还需要修改Irrlicht工程的PrecompiledHeaders属性 。 这会告诉VisualStudio使用我们之前编译好的C++版本的PCH文件 。 如下图所示:
漫漫开发路PCH:提升大型工程编译速度的利器
文章图片
对于工程中所有的C源文件 , 我们也需要对应地修改其PrecompiledHeaders属性 。 这会告诉VisualStudio在编译这些C源文件时 , 使用C版本的PCH 。 如下图所示:
漫漫开发路PCH:提升大型工程编译速度的利器
文章图片
为了使用我们创建的PCH , 我们需要在所有的C和C++源文件中包含pch.h这个头文件 。 为了简单起见 , 我们在Irrlicht工程的AdvancedC/C++properties属性中使用到了/FI编译开关 。 这会使得pch.h被自动包含到每一个源文件中 , 即使它没有通过#include预编译指令进行显式包含 。 如下图所示:
漫漫开发路PCH:提升大型工程编译速度的利器
文章图片
为了成功的编译引入了PCH之后的Irrlicht工程 , 需要做下面的两个小改动:1.在整个工程级别添加预处理宏HAVE_BOOLEAN 。 2.在两个文件中取消对farpreprocessor的定义 。