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

时间:2016-07-06 22:33:45

标签: c++ cmake clion

TL; DR :在构建新代码之前,如何让CLion终止任何正在运行的代码版本?

我开始玩CLion for C ++。我注意到我经常忘记在再次尝试编译之前停止最后一次迭代,这导致“权限被拒绝”错误 - 当我第一次遇到这个时,我花了将近半个小时的权限设置,然后才意识到它是因为旧版本仍在运行,因此无法替换为新的可执行文件。

据我所知,如果没有嵌入Batch(因为我在Windows上)脚本,就无法在CMake中执行此操作。我想避免这种情况,因为对于......而不是那么多奖励,它会有很多不必要的复杂性。

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

@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调用批处理文件并在每次构建之前将processname传递给它。

这是它的工作原理:

  1. 运行>编辑配置>选择要更改的配置(在我的情况下" Build All")
  2. 在"发布之前:外部..." -section单击绿色加号
  3. 选择"运行外部工具"并单击弹出窗口中的绿色加号
  4. 选择工具的名称
  5. 在"程序中添加批处理文件的路径:"字段
  6. $ProjectName$.exe写入"参数:"字段
  7. 单击“确定”,直到返回配置窗口
  8. 通过选择并单击向上箭头
  9. 为脚本提供足够的优先级

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