/Yu(使用预编译标头文件)

指示编译器在当前编译中使用现有的预编译标头 (.pch) 文件。

语法

/Yu[filename]

参数

filename
标头文件的名称,使用 #include 预处理器指令包括在源文件中。

备注

对用于创建预编译标头的 /Yc 选项以及用于指示使用预编译标头的任何后续 /Yu 选项,包含文件的名称必须相同。

对于 /Yc,filename 指定预编译停止的点;编译器通过 filename 预编译所有代码,并使用包含文件的基名称和 .pch 的扩展名来命名生成的预编译标头。

.pch 文件必须已使用 /Yc 进行了创建。

编译器将 .h 文件之前出现的所有代码视为预编译。 它跳过与 .h 文件关联的指令 #include,使用 .pch 文件中包含的代码,然后编译 filename 后的所有代码。

在命令行上,/Yu 和 filename 之间不允许使用空格。

在不使用文件名指定 /Yu 选项时,源程序必须包含 #pragma hdrstop pragma,用于指定预编译标头 .pch 文件的文件名。 在这种情况下,编译器将使用由 /Fp (Name .pch file) 命名的预编译标头(.pch 文件)。 编译器跳到该 pragma 的位置,并从指定的预编译标头文件还原已编译状态。 然后,编译器将仅编译该 pragma 之后的代码。 如果 #pragma hdrstop 未指定文件名,编译器将查找文件名派生自源文件基名称且带有 .pch 扩展名的文件。 还可以使用 /Fp 选项来指定其他 .pch 文件。

如果不使用文件名指定 /Yu 选项,并且无法指定 hdrstop pragma,则会生成错误消息,并且编译失败。

如果在同一命令行中使用 /Ycfilename 和 /Yufilename 选项,并且两者都引用相同的文件名,则优先使用 /Ycfilename,此时将预先编译所有代码,直到指定文件(包括该文件)为止。 此功能简化了生成文件的编写。

由于 .pch 文件包含有关计算机环境的信息和有关该程序的内存地址信息,因此应仅在创建 .pch 文件的计算机上使用该文件。

有关预编译标头的详细信息,请参阅:

在 Visual Studio 开发环境中设置此编译器选项

  1. 在项目的 .cpp 文件上指定 /Yc(创建预编译标头文件)

  2. 打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性

  3. 选择“配置属性”>“C/C++”>“预编译标头”属性页。

  4. 修改“预编译标头”属性、“通过文件创建/使用 PCH”属性或“创建/使用预编译标头”属性。

以编程方式设置此编译器选项

示例

如果以下代码:

#include <afxwin.h>   // Include header for class library
#include "resource.h" // Include resource definitions
#include "myapp.h"    // Include information specific to this app
...

使用命令行 CL /YuMYAPP.H PROG.CPP 进行编译,则编译器不会处理三个 include 语句。 相反,它使用 MYAPP.pch 中的预编译代码,从而缩短预处理所有这三个文件(及其可能包含的任何文件)所需要的时间。

如果 .pch 文件的名称不同于 /Yc 的 filename 参数或源文件的基名称,则可以将 /Fp (Name .pch file) 选项与 /Yu 选项一起使用来指定该文件的名称,如以下示例所示:

CL /YuMYAPP.H /FpMYPCH.pch PROG.CPP

此命令指定一个名为 MYPCH.pch 的预编译标头文件。 编译器使用其内容还原所有标头文件的预编译状态,直到 MYAPP.h 文件(包括该文件)为止。 然后,编译器编译在 #include "MYAPP.h"* 指令之后出现的代码。

另请参阅

MSVC 编译器选项
MSVC 编译器命令行语法