Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在构建新迭代时终止上一个迭代_C++_Cmake_Clion - Fatal编程技术网

C++ 在构建新迭代时终止上一个迭代

C++ 在构建新迭代时终止上一个迭代,c++,cmake,clion,C++,Cmake,Clion,TL;DR:如何让CLion在构建新版本之前删除任何正在运行的代码版本 我已经开始和克利永玩C++了。我注意到,在再次编译之前,我经常忘记停止上一次迭代,这导致了“权限被拒绝”错误——当我第一次遇到这个问题时,我花了将近半个小时摆弄权限设置,才意识到这是因为旧版本仍在运行,因此无法用新的可执行文件替换 据我所知,如果不嵌入批处理(因为我在Windows上)脚本,在CMake中就无法做到这一点。我想避免这种情况,因为这会给…带来很多不必要的复杂性。。。没有那么多报酬 简而言之,在CLion或CMa

TL;DR:如何让CLion在构建新版本之前删除任何正在运行的代码版本

我已经开始和克利永玩C++了。我注意到,在再次编译之前,我经常忘记停止上一次迭代,这导致了“权限被拒绝”错误——当我第一次遇到这个问题时,我花了将近半个小时摆弄权限设置,才意识到这是因为旧版本仍在运行,因此无法用新的可执行文件替换

据我所知,如果不嵌入批处理(因为我在Windows上)脚本,在CMake中就无法做到这一点。我想避免这种情况,因为这会给…带来很多不必要的复杂性。。。没有那么多报酬


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

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

@echo on
tasklist /FI "IMAGENAME eq %1" 2>NUL |find /I "%1">NUL
if "%ERRORLEVEL%"=="0" taskkill /F /im %1
(第二行检查进程是否正在运行-在此处找到:)

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

这就是它的工作原理:

  • 运行>编辑配置>选择要更改的配置(在本例中为“全部生成”)
  • 在“启动前:外部…”部分,单击绿色加号
  • 选择“运行外部工具”,并在弹出窗口中单击绿色加号
  • 为工具选择名称
  • 在“程序:”字段中添加批处理文件的路径
  • $ProjectName$.exe
    写入“参数:”字段
  • 单击确定,直到回到配置窗口
  • 通过选择脚本并单击向上箭头,为脚本提供足够的优先级

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

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

    @echo on
    tasklist /FI "IMAGENAME eq %1" 2>NUL |find /I "%1">NUL
    if "%ERRORLEVEL%"=="0" taskkill /F /im %1
    
    (第二行检查进程是否正在运行-在此处找到:)

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

    这就是它的工作原理:

  • 运行>编辑配置>选择要更改的配置(在本例中为“全部生成”)
  • 在“启动前:外部…”部分,单击绿色加号
  • 选择“运行外部工具”,并在弹出窗口中单击绿色加号
  • 选择工具的名称
  • 在“程序:”字段中添加批处理文件的路径
  • $ProjectName$.exe
    写入“参数:”字段
  • 单击确定,直到回到配置窗口
  • 通过选择脚本并单击向上箭头,为脚本提供足够的优先级

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

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


    或者,可以设置为仅运行单个实例。这样,在运行新实例之前,将始终终止以前的实例。要启用此功能,请转到
    运行|编辑配置
    并选择
    仅单个实例

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


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

    答案的最后一半实际上回答了我的问题,即如何在启动另一个实例之前自动终止上一个实例。谢谢@很高兴听到你这么说。我仍然保留答案中的第一部分,以防有人想手动终止它(通常在关闭控制台而不停止调试器的情况下会很有用,而且进程不会死)。你的答案的后半部分实际上回答了我的问题,这就是如何在启动另一个实例之前自动终止上一个实例。谢谢@很高兴听到你这么说。我仍然保留答案中的第一部分,以防有人想要手动终止它(通常在关闭控制台而不停止调试器并且进程不会死掉的情况下很有用)。