预编译头文件问题

4
我现在正在重新组织我的项目,之前只是一个简单的应用程序,现在变成了一对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".

那么,有没有人知道一些技巧或方法来共享一个预编译头文件,在保留正确的调试信息的同时用于两个项目中?


1
请投票支持:https://connect.microsoft.com/VisualStudio/feedback/details/98645/visual-c-build-c2859-on-rebuild-on-solution-with-shared-precompiled-headers?wa=wsignin1.0 - Hans Passant
与:https://dev59.com/f3RB5IYBdhLWcg3wXmNI 相关的内容。 - Scott Langham
2个回答

2
问题是,为什么你想共享预编译头文件(PCH)呢?一般来说,我会说这没有意义。PCH用于加速编译而不是在不同的项目之间共享任何信息。
既然您也提到了PDB文件,您可能想要使用应用程序调试库代码。可以通过在编译库时设置/Fd参数来实现这一点。当您将库链接到应用程序并且链接器找到相应的PDB文件时,您将获得完整的调试支持。

1

这听起来很复杂,而且设置起来很繁琐。更重要的是,可能根本不可能实现。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接