Visual Studio不会覆盖不同构建配置的输出库

时间:2013-09-22 18:06:26

标签: visual-studio-2010 cmake

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

在我的解决方案中,我有几个lib项目和一个exe项目。 对于Debug构建配置,我使用输出名称,如lib1_d.liblib2_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 my SO question

有没有办法强制Visual Studio 2010始终覆盖输出?最好是我可以从CMake提供的一些旗帜。

1 个答案:

答案 0 :(得分:1)

VS构建系统通过为不同的配置使用不同的构建目录来解决此问题。默认情况下,32位Debug输出进入Debug目录,Release输出进入Release目录,64位Debug输出进入x64 \ Debug目录,等等。这样,不同的配置永远不会踩到彼此的输出文件。

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

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