通过.bat文件执行Bazel run动作时出现警告并闪退
Bazel C++项目批处理脚本问题解决
问题1:批处理运行Bazel时提示不在工作区
直接在PowerShell或cmd里执行这条命令,能正常运行带自定义参数的Bazel C++项目:
start bazel run -c opt main -- --players="5"
但用下面的批处理脚本运行时:
echo off start cmd /k CD C:\Users\user\Documents\Code\game start bazel run -c opt main -- --players="5"
会弹出新的cmd窗口,显示警告后直接闪退:
G: Invoking Bazel in batch mode since it is not invoked from within a
workspace (below a directory having a WORKSPACE file). OpenJDK 64-Bit
Server VM warning: Options -Xverify:none and -noverify were deprecated
in JDK 13 and will likely be removed in a future release.
问题2:程序运行后窗口自动关闭
调整脚本后已经能成功构建程序,但cmd窗口会在程序启动后立刻关闭。试过以下修改都没用:
@START /REALTIME /WAIT /B /D "%UserProfile%\Documents\Code\game" bazel run -c opt main -- --players="5" @CD /D "%UserProfile%\Documents\Code\game" 2>NUL && bazel run -c opt main -- --players="5"
解决方案
1. 修复Bazel工作区问题
原脚本里的start cmd /k CD ...只是单独开个窗口切换目录,但start bazel ...是在脚本的原始工作目录执行的,根本没进到项目目录。要把Bazel命令切换到项目目录后执行,修改脚本为:
@echo off cd /d "C:\Users\user\Documents\Code\game" bazel run -c opt main -- --players="5"
如果需要在新窗口里运行,把命令整合到同一个start指令里:
@echo off start cmd /k "cd /d C:\Users\user\Documents\Code\game && bazel run -c opt main -- --players="5""
2. 解决窗口自动关闭问题
- 方法一:添加暂停指令
在脚本末尾加pause,让窗口等用户按任意键再关闭:
@echo off cd /d "C:\Users\user\Documents\Code\game" bazel run -c opt main -- --players="5" pause
- 方法二:用
cmd /k包裹全部命令cmd /k会在命令执行完后保持窗口打开,把切换目录和Bazel命令打包进去:
@echo off cmd /k "cd /d C:\Users\user\Documents\Code\game && bazel run -c opt main -- --players="5""
- 方法三:拆分构建与运行步骤
如果是bazel run启动的程序执行完直接退出导致窗口关闭,可以先构建出二进制文件,再手动运行,最后加暂停:
@echo off cd /d "C:\Users\user\Documents\Code\game" bazel build -c opt main bazel-bin/main --players="5" pause
内容的提问来源于stack exchange,提问作者Daqs
相关产品推荐
相关产品推荐

