预编译标题问题
Posted
技术标签:
【中文标题】预编译标题问题【英文标题】:Precompiled headers question 【发布时间】:2010-06-15 13:37:53 【问题描述】:我现在正在重新组织我的项目,最近一个简单的应用程序现在变成了一对 C++ 项目 - 静态库和真正的应用程序。
我想在两个项目之间共享一个预编译头文件,但在设置.pdb
文件路径时遇到了一些麻烦。
假设我的第一个项目名为Library
,并使用相应的Library.pdb
文件构建它的.lib
文件。现在,第二个项目名为 Application
并将所有内容构建到同一个文件夹中(.exe
和 另一个 Application.pdb
文件)。
现在我的两个项目都基于 一个 实际头文件创建自己的预编译头文件(Library.pch
和 Application.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】:设置起来听起来既复杂又麻烦。不仅如此,它可能根本不可能。
相反,您可以将一个应用程序的预编译标头包含到第二个应用程序中。它仍然会为第二个项目编译一次,但维护变得容易,您不必重新定义第二个项目中的依赖项(只需包含它们)。
【讨论】:
以上是关于预编译标题问题的主要内容,如果未能解决你的问题,请参考以下文章