自己做一个stdfx.h文件可以吗?

Is it OK to make a stdfx.h file myself?

现在,我意识到我的项目需要一个预编译的 header。但是,一开始,我将我的项目创建为一个没有 stdfx.h header 文件的空项目。所以,这就是我所做的:
- 我创建了一个 header 文件名 stdfx.h
- 在该文件中,我包含了一些库。
- 我去了项目 属性 Pages -> C/C++ -> Precompiled header -> 将 PRECOMILED HEADER 选项设置为 Use (/Yu).
- 最后,我在每个 cpp 文件中包含 stdfx.h。

有效。但是,我想知道我自己创建的 stdfx.h 文件是否像 Visual Studio 自动创建的文件一样工作?我的意思是它真的是一个预编译的 header 可以节省编译时间还是只是一个普通的 header 文件?

你绝对可以自己制作stdfx.h或其他预编译的header文件(名称并不重要)。但是您应该遵循 MSDN.

中描述的一些规则

您可以在 Documentation

中阅读有关预编译 header 的更多信息

它通常被命名为stdafx.h,但它真的没有关系。您可以随意命名预编译的 header。

您还差最后一步。

您还需要创建一个 stdafx.cpp。这是一个只有 #include "stdafx.h" 行的空文件。

对于这个特定文件,在解决方案资源管理器中右键单击它,然后select 属性。这将打开一个属性页面,其中包含特定于此源文件的设置(默认情况下继承您的项目设置)。对于这个特定文件,select /Yc 作为预编译设置的编译器选项,而不是 /Yu。如果不这样做,您可能不会观察到预编译 headers.

的构建速度改进

当 Visual Studio 构建时,它将首先构建您的 stdafx.cpp 文件。与此同时,它将构建其他源文件将获取的 .pch 文件。

当我在这里的时候。预编译的header文件中要包含的东西都是系统和C/C++运行时header文件。 (例如 <windows.h>, <stdio.h>, <string>, <map>,等等...)。通过包含所有这些文件,您将获得最大收益 - 因为它们从构建到构建都不会改变。