0

我使用 CMake 为 Visual Studio 2010 生成的解决方案。

在我的解决方案中,我有几个lib项目和一个exe项目。对于Debug构建配置,我使用诸如等的输出lib1_d.lib名称lib2_d.lib...

对于Release我使用的构建配置lib1.liblib2.lib...

感谢 CMake,我使用了一个额外的构建配置 - RelWithDebugInfo. 我为此构建配置使用与Release.

现在问题来了:

假设一切都被清理干净。

我点击F5(运行/开始调试)RelWithDebugInfo。所有项目都已构建(exe取决于它们)并且项目成功运行。

我切换到Release并再次击中F5。所有项目都已构建并且项目成功运行。(输出目录中的库被覆盖)

我切换回RelWithDebugInfo并击中F5. VS 快速通过并给出All outputs are up-to-date.......Build succeeded.并且不会覆盖lib输出目录中的文件。因此应用程序崩溃是因为它使用库进行其他构建配置。

此问题发生在订购Release->RelWithDebugInfoRelWithDebugInfo->Release

我还没有找到解决方案,如何在RelWithDebugLibraries 我的 SO 问题中添加其他前缀

有没有办法强制Visual Studio 2010总是覆盖输出?最好通过我可以从 CMake 提供的一些标志。

4

1 回答 1

1

VS 构建系统通过为不同的配置使用不同的构建目录来解决这个问题。默认情况下,32 位 Debug 输出到 Debug 目录,Release 输出到 Release 目录,64 位 Debug 输出到 x64\Debug 目录等等。这样不同的配置就不会相互影响对方的输出文件。

在我看来,您添加的 RelwithDebugInfo 配置所犯的错误是您没有修改输出文件名。因此,构建系统会从另一个配置中看到最新的输出文件,并且认为没有必要重新构建它们。

一旦超过两个,提出构建输出文件名的变体确实变得不切实际,请考虑使用 VS 方式来做到这一点。

于 2013-09-22T18:25:49.703 回答