预编译标题问题

Posted

技术标签:

【中文标题】预编译标题问题【英文标题】:Precompiled headers question 【发布时间】:2010-06-15 13:37:53 【问题描述】:

我现在正在重新组织我的项目,最近一个简单的应用程序现在变成了一对 C++ 项目 - 静态库真正的应用程序

我想在两个项目之间共享一个预编译头文件,但在设置.pdb 文件路径时遇到了一些麻烦。

假设我的第一个项目名为Library,并使用相应的Library.pdb 文件构建它的.lib 文件。现在,第二个项目名为 Application 并将所有内容构建到同一个文件夹中(.exe另一个 Application.pdb 文件)。

现在我的两个项目都基于 一个 实际头文件创建自己的预编译头文件(Library.pchApplication.pch)。 它有效,但我认为这是浪费时间,我还认为应该有一种方法可以在两个项目之间共享一个预编译头。

如果在我的Application 项目中我尝试设置Use Precompiled Header (/Yu) 选项并将其设置为Library.pch,它将不起作用,因为以下错误:

error C2858: command-line option 'program database name "Application.pdb" inconsistent with precompiled header, which used "Library.pdb".

那么,有没有人知道一些技巧或方法可以在两个项目之间共享 一个 预编译的标头以保留正确的调试信息?

【问题讨论】:

添加您的投票:connect.microsoft.com/VisualStudio/feedback/details/98645/… 相关:***.com/questions/645747/… 【参考方案1】:

问题是,为什么要共享预编译头 (PCH) 文件。一般来说,我会说,这没有意义。 PCH 用于加速编译,不会在不同项目之间共享任何信息。

由于您还编写了 PDB 文件,因此您可能希望使用您的应用程序调试库代码。这可以通过在编译库时设置 /Fd 参数来实现。当您在应用程序中链接库并且链接器找到相应的 PDB 文件时,您将获得完整的调试支持。

【讨论】:

【参考方案2】:

设置起来听起来既复杂又麻烦。不仅如此,它可能根本不可能。

相反,您可以将一个应用程序的预编译标头包含到第二个应用程序中。它仍然会为第二个项目编译一次,但维护变得容易,您不必重新定义第二个项目中的依赖项(只需包含它们)。

【讨论】:

以上是关于预编译标题问题的主要内容,如果未能解决你的问题,请参考以下文章

预编译标题问题

以下预编译是啥意思?

GCC 和预编译头文件

C++ 预编译头文件已禁用

资产预编译错误

包含指令的预编译头文件