/Yd(将调试信息放在对象文件中)

将其与 /Yc/Z7 选项一起使用时,会将完整的调试信息放在从预编译标头 (.pch) 文件创建的所有对象文件中。 已弃用。

语法

/Yd

备注

/Yd 已弃用;Visual C++ 现支持写入单个 .pdb 文件的多个对象,请改用 /Zi。 有关已弃用编译器选项的列表,请参阅按类别列出的编译器选项中的已弃用并删除的编译器选项

除非需要分发包含调试信息的库,否则请使用 /Zi 选项而不是 /Z7 和 /Yd

仅在要分发包含调试信息的库时,才有必要在每个 .obj 文件中存储完整的调试信息。 它会减缓编译速度,并且需要相当多的磁盘空间。 在没有使用 /Yd 的情况下使用 /Yc 和 /Z7 时,编译器会将通用调试信息存储在从 .pch 文件创建的第一个 .obj 文件中。 编译器不会将此信息插入到随后从 .pch 文件创建的 .obj 文件中;它插入对该信息的交叉引用。 无论有多少 .obj 文件使用 .pch 文件,只有一个 .obj 文件包含通用调试信息。

尽管此默认行为会缩短生成时间并减少磁盘空间需求,但如果进行小幅更改也要重新生成包含通用调试信息的 .obj 文件,则是不可取的。 在这种情况下,编译器必须重新生成包含对原始 .obj 文件的交叉引用的所有 .obj 文件。 此外,如果不同项目使用一个通用的 .pch 文件,则很难依赖对单个 .obj 文件的交叉引用。

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

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

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

  2. 选择“配置属性”>“C/C++”>“命令行”属性页

  3. 在“附加选项”框中输入编译器选项。

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

示例

假设有两个基文件:F.cpp 和 G.cpp,两个文件均包含以下 #include 语句:

#include "windows.h"
#include "etc.h"

以下命令将创建预编译标头文件 ETC.pch 和对象文件 F.obj:

CL /YcETC.H /Z7 F.CPP

对象文件 F.obj 包括 WINDOWS.h 和 ETC.h(及其包括的任何其他标头文件)的类型和符号信息。 现在可以使用预编译标头 ETC.pch 来编译源文件 G.cpp:

CL /YuETC.H /Z7 G.CPP

对象文件 G.obj 不包括预编译标头的调试信息,而只是引用 F.obj 文件中的该信息。 请注意,必须链接到 F.obj 文件。

如果未使用 /Z7 来编译预编译标头,仍可使用 /Z7 在之后的编译中使用该标头。 但是,调试信息会放在当前的对象文件中,并且在预编译标头中定义的本地符号和函数将对调试器不可用。

另请参阅

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