Visual Studio 2017内置了对cmake项目的支持,这意味着您只需打开包含 CMakeLists.txt 的文件夹即可使用它。但是,似乎没有办法prevent the console window from closing after running an executable。
使用普通的Visual Studio项目,您可以使用 Ctrl + F5 在没有附加调试器的情况下运行。但是, Ctrl + F5 与 F5 完全相同,也就是说,它运行可执行文件并立即关闭控制台窗口。
另一个建议是将子系统设置为应用程序的“控制台”,但cmake项目没有可以为其设置设置的Visual Studio项目。
我想也许我可以转到我的 CMakeLists.txt 的调试和启动设置(右键单击>调试和启动设置> target.exe),打开 launch.vs.json 。不幸的是,我无法找到相关文档。但是,通过查看模式,似乎我可以设置"noDebug": true
,但这只是关闭了调试器并且没有做任何事情来阻止控制台关闭:
{
"version": "0.2.1",
"defaults": {},
"configurations": [
{
"type": "default",
"project": "CMakeLists.txt",
"projectTarget": "target.exe",
"name": "target.exe",
"noDebug": true
}
]
}
这让我发疯了。我不能只在主函数中添加system("pause")
,因为我正在使用测试框架提供的主函数。此外,这应该是完全没必要的; Visual Studio应该为我处理它。
当我的可执行文件来自cmake项目时,如何在可执行文件完成后使Visual Studio控制台不关闭?
我正在使用 Microsoft Visual Studio Community 2017,版本15.2(26430.16)发布
答案 0 :(得分:0)
这是Visual Studio 2017 CMake支持中的bug。在VS 2019中已解决。
作为临时的解决方法,在应用程序出口添加一个断点并在( F5 )上运行调试:
exit
现在,如果您运行项目( F5 ),则调试器将在main()
返回之后停止。
要删除断点,请转到断点视图( Ctrl + Alt + B )并删除从那里开始。
答案 1 :(得分:-1)
最近碰到了这种情况,因为我们有时会在我们的UI应用程序中使用stdout来调试信息,我们需要在我们的开发机器上打开控制台窗口,但在我们的CI构建中将其转换为。
在您的CMakeLists.txt中必须是'add_executable'语句,如下所示:
add_executable(project_name WIN32 ${your_source_files})
如果您省略WIN32
,CMake会将子系统更改为“控制台”,这会导致Visual Studio在您的应用程序退出时保持控制台窗口处于打开状态。