我为Visual Studio 2010使用CMake生成的解决方案。
在我的解决方案中,我有几个lib
项目和一个exe
项目。
对于Debug
构建配置,我使用输出名称,如lib1_d.lib
,lib2_d.lib
等...
对于Release
版本配置,我使用lib1.lib
,lib2.lib
...
感谢CMake我使用了一个额外的构建配置 - RelWithDebugInfo
。我为此构建配置使用与Release
相同的输出名称。
现在问题在于:
假设一切都已清理干净。
我点击F5
(运行/开始调试)RelWithDebugInfo
。所有项目都已构建(exe
取决于它们)并且项目成功运行。
我切换到Release
并再次点击F5
。所有项目都已构建,项目运行成功。 (输出目录中的库被覆盖)
我切换回RelWithDebugInfo
并点击F5
。 VS快速通过并提供All outputs are up-to-date.
... Build succeeded.
并且不会覆盖输出目录中的lib
个文件。因此应用程序崩溃是因为它使用库进行其他构建配置。
订购Release->RelWithDebugInfo
和RelWithDebugInfo->Release
我找不到解决方案,如何将其他前缀添加到RelWithDebugLibraries
my SO question
有没有办法强制Visual Studio 2010
始终覆盖输出?最好是我可以从CMake提供的一些旗帜。
答案 0 :(得分:1)
VS构建系统通过为不同的配置使用不同的构建目录来解决此问题。默认情况下,32位Debug输出进入Debug目录,Release输出进入Release目录,64位Debug输出进入x64 \ Debug目录,等等。这样,不同的配置永远不会踩到彼此的输出文件。
在我看来,您添加的RelwithDebugInfo配置所犯的错误是您没有修改输出文件名。因此,构建系统会从另一个配置中查看最新的输出文件,并认为没有必要重建它们。
一旦你超过两个,提出构建输出文件名的变体确实变得不切实际,请考虑VS方式来做到这一点。