Precomplied Headers

引言

上一节我们设置了事件系统,这一节我们在开发初期就开始真正讨论预编译的头文件并实际开始使用预编译的标头。

正文

回到我们的引擎,显然会需要许多标准库:

  • Event.h

    #include <string>
    #include <functional>
  • ApplicationEvent.h

    #include <sstream>
  • Log.h

    #include <memory>

我们并没有太多的源文件,这意味着我们无需花费太多时间进行实际编辑,所以现在创建预编译的头文件是个不错的主意。回到VisualStudio,新建ifnpch.h头文件和ifnpch.cpp源文件,在ifnpch.cpp中引入头文件:

#include "ifnpch.h"

回到ifnpch.h,我们要做的第一件事是如果我们的平台是Windows,我们必须包含<windows.h>

#pragma once

#ifdef IFN_PLATFORM_WINDOWS
#include <Windows.h>
#endif

对于所有平台,我们都可以采用类似的方式通过iddef包含在此ifnpch.h中。除了特定的平台,我们还需要包含一些常见的头文件诸如iostream之类的:

#pragma once

#include <iostream>
#include <memory>
#include <utility>
#include <algorithm>
#include <functional>
#include <sstream>

#include <string>
#include <vector>
#include <unordered_map>
#include <unordered_set>

#ifdef IFN_PLATFORM_WINDOWS
#include <Windows.h>
#endif

然后我们回到之前的文件把这些头文件删掉,通过premakeifnpch.hifnpch.cpp包含进来:

...
project "Infinite"
...

target ()
objdir ()

+ pchheader "ifnpch.h"
+ pchsource "Infinite/src/ifnpch.cpp"

...

调试

事实上VisualStudio也提供给我们手动设置的方式,在属性中的C/C++预编译头中选择使用,并将预编译头文件设置为我们的ifnpch.h

最后让Event.hApplicationEvent.hLog.h包含ifnpch.h即可。集成预编译头非常容易,这也是大型项目必须要做的事,这样我们就可以开始使用了。