防止在Visual Studio 2017 cmake项目中关闭控制台窗口

时间:2017-07-26 04:55:22

标签: c++ visual-studio visual-studio-2017

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)发布

2 个答案:

答案 0 :(得分:0)

这是Visual Studio 2017 CMake支持中的bug。在VS 2019中已解决。

作为临时的解决方法,在应用程序出口添加一个断点并在( F5 )上运行调试:

  1. Ctrl + B 新断点
  2. 输入函数名称:exit
  3. 按“确定”

现在,如果您运行项目( 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在您的应用程序退出时保持控制台窗口处于打开状态。