很抱歉复活这个旧线程,但我昨天遇到了类似的问题,我的解决方案与我在网上找到的任何内容无关。这是出现的第一个 SO 帖子,所以我想如果有人遇到同样的问题,我会做出贡献。
这是我遇到问题的方式:
我最初有一个创建 exe 的项目:
- MyProject.vcxproj -> MyProject.exe
然后,我通过将 main.cpp 拆分为单独的 .exe 项目,将原始项目转换为 .lib 项目。我将 exe 项目的目标名称设置为与 lib 相同,这样我们就不会更改我们的可执行文件名称。我还添加了一个使用该库但 main.cpp 略有不同的不同 .exe 项目
- MyProject.vcxproj -> MyProject.lib
- MyProjectVariant1.vcxproj -> MyProject.exe
- MyProjectVariant2.vcxproj -> MyProjectVariant2.exe
我们的解决方案目前的布局方式是,所有项目都将它们的目标转储到同一个输出目录中。
问题是 .lib 和第一个 .exe 共享相同的目标名称,因此任何辅助文件(pdb 文件、iobj、ipdb 等)都会被覆盖。MyProject.exe 在链接到 MyProject.lib 之前会直接覆盖这些辅助文件。
结论:
我通过为第一个变体使用唯一的目标名称来“修复”该问题。我们还将审查我们的构建策略,看看我们是否应该为每个项目使用不同的输出目录,而不是将它们全部放在同一个位置。给他们不同的目标目录似乎更合乎逻辑。