构建新迭代时终止上一次迭代

Terminate the previous iteration when building a new one

TL;DR:如何让 CLion 在构建新代码之前杀死所有 运行 版本的代码?

我已经开始使用 CLion for C++。我注意到我经常忘记在尝试再次编译之前停止最后一次迭代,这会导致 "Permission denied" 错误——当我第一次遇到这个问题时,我花了将近半个小时来摆弄权限设置才意识到这一点是因为旧版本仍然是 运行,因此无法用新的可执行文件替换。

据我所知,如果不嵌入 Batch(因为我在 Windows)脚本,就无法在 CMake 中执行此操作。我想避免这种情况,因为这会带来很多不必要的复杂性……没有那么多回报。

简而言之,CLion 或 CMake 中是否有一个选项可以在 运行 新迭代时停止上一次迭代?

据我所知,默认情况下这是不可能的。 我发现的一种解决方案是创建一个包含以下内容的批处理文件:

@echo on
tasklist /FI "IMAGENAME eq %1" 2>NUL |find /I "%1">NUL
if "%ERRORLEVEL%"=="0" taskkill /F /im %1

(第二行检查进程是否为 运行 - 在此处找到:How to check if a process is running via a batch script

并编辑构建配置,使 CLion 在每次构建之前调用批处理文件并将进程名称传递给它。

这是它的工作原理:

  1. 运行 > 编辑配置 > select 要更改的配置(在我的例子中 "Build All")
  2. 在 "Before launch: External..." 部分单击绿色加号
  3. 选择"Run external tool"并点击弹出的绿色加号window
  4. 为工具选择一个名称
  5. 在"Program:"字段中添加批处理文件的路径
  6. $ProjectName$.exe写入"Parameters:"字段
  7. 单击确定,直到您返回配置 window
  8. 通过 select 并单击向上箭头
  9. 为脚本提供足够的优先级

现在它应该在每次构建之前尝试终止 运行 进程。

是的。只需按 ctrl + F2 或转到 Run > Stop 即可终止上一次迭代,以防它保持 运行ning.

或者,您可以设置为 运行 仅单个实例。这样,先前的实例将始终在 运行 新实例之前终止。要启用此功能,请转到 Run | Edit Configurations 和 select Single Instance Only