我正在尝试自动化在 Windows 10 上构建 ffmpeg 的过程。我正在遵循此处的指南:https://trac.ffmpeg.org/wiki/CompilationGuide/MSVC
当我手动执行此操作时,一切正常,但是我想编写一个批处理文件,我可以运行该文件来自动完成整个过程。
构建需要我设置Visual Studio环境和MSYS环境。这就是我遇到麻烦的地方,因为运行 MSYS 环境会打开一个新的 shell。我想在MSYS shell打开后将configure/make/make install命令传递给它。
我在这里尝试了解决方案:如何在cmd中打开一个新的shell,然后在新的shell中运行脚本?
他们遇到的问题看起来与我的类似,但那里发布的解决方案对我不起作用。
这是当前的bat文件:
call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\vcvars64.bat"
call "C:\workspace\windows\mingw-get\msys\1.0\msys.bat" start cmd.exe /k bscript
pause
和脚本:
./configure --enable-shared --toolchain=msvc --arch=amd64
make
make install
我尝试过各种变体,例如:
call "C:\workspace\windows\mingw-get\msys\1.0\msys.bat" /k bscript
call "C:\workspace\windows\mingw-get\msys\1.0\msys.bat" bscript
start "C:\workspace\windows\mingw-get\msys\1.0\msys.bat" /k bscript
start "C:\workspace\windows\mingw-get\msys\1.0\msys.bat" bscript
我还尝试将 bscript 代码保留在原始批处理文件中。
configure/make 命令要么在原始 cmd 窗口、新的 cmd 窗口中运行,要么根本不运行。
有没有办法像这样将命令传递到 MSYS shell?
这可能被认为有点晚了,但本着帮助未来来到这里的人的精神:
MSYS2 文档包含专门用于启动 MSYS2 的页面:https://www.msys2.org/wiki/Launchers/ 从那里,我们了解到可以从 Windows shell 启动 MSYS2 环境,如下所示:
C:\\msys64\\usr\\bin\\env MSYSTEM=MSYS /usr/bin/bash -li
如果将其放入
*.bat
文件中并执行脚本,将生成一个新的终端窗口,其中 bash 在 MSYS2 环境下运行。
文档进一步说明了如何在 bash shell 中运行某些内容:
C:\\msys64\\usr\\bin\\env MSYSTEM=MSYS /usr/bin/bash -lc python
上面将再次生成一个新的终端窗口,加载 MSYS2 环境,启动 bash,然后在该 bash 实例中运行 python 可执行文件。
从此处,可以直接运行您想要的程序(而不是
python
),也可以创建一个 bash 脚本并将该脚本的参数传递给 bash 调用,以便从 Windows 批处理文件在 MSYS2 环境中执行常规 bash 脚本:)
我使用 Windows shell 执行了以下命令
cmd
:
C:\\msys64\\msys2_shell.cmd -mingw64 -defterm -shell bash -c "/c/.../x.exe -switch parameter"
然而,路径
/c/.../x.exe
必须替换为您的应用程序才能启动。 -switch
等也一样。
env.exe
的使用对我不起作用。
可能很重要:我正在使用
msys2
。
命令:
$ pacman -Q
输出:
base 2020.12-1
base-devel 2022.01-2
bash 5.1.016-1
bash-completion 2.11-2
binutils 2.37-5
bison 3.8.2-3
brotli 1.0.9-3
bsdtar 3.6.1-2
bzip2 1.0.8-3
...
mingw-w64-x86_64-ca-certificates 20211016-3
mingw-w64-x86_64-crt-git 10.0.0.r32.g89bacd2be-1
mingw-w64-x86_64-expat 2.4.8-1
mingw-w64-x86_64-gcc 12.1.0-2
mingw-w64-x86_64-gcc-ada 12.1.0-2
mingw-w64-x86_64-gcc-fortran 12.1.0-2
mingw-w64-x86_64-gcc-libgfortran 12.1.0-2
mingw-w64-x86_64-gcc-libs 12.1.0-2
mingw-w64-x86_64-gcc-objc 12.1.0-2
mingw-w64-x86_64-gdb 12.1-1
mingw-w64-x86_64-gdb-multiarch 12.1-1
mingw-w64-x86_64-gettext 0.21-3
mingw-w64-x86_64-gmp 6.2.1-3
mingw-w64-x86_64-headers-git 10.0.0.r32.g89bacd2be-1
mingw-w64-x86_64-isl 0.24-1
mingw-w64-x86_64-libffi 3.3-4
mingw-w64-x86_64-libgccjit 12.1.0-2
mingw-w64-x86_64-libiconv 1.17-1
mingw-w64-x86_64-libmangle-git 10.0.0.r32.g89bacd2be-1
mingw-w64-x86_64-libsystre 1.0.1-4
mingw-w64-x86_64-libtasn1 4.18.0-1
mingw-w64-x86_64-libtre-git r128.6fb7206-2
mingw-w64-x86_64-libwinpthread-git 10.0.0.r32.g89bacd2be-1
mingw-w64-x86_64-make 4.3-1
mingw-w64-x86_64-mpc 1.2.1-1
mingw-w64-x86_64-mpdecimal 2.5.1-1
mingw-w64-x86_64-mpfr 4.1.0.p13-1
mingw-w64-x86_64-ncurses 6.3-5
mingw-w64-x86_64-openssl 1.1.1.o-3
mingw-w64-x86_64-p11-kit 0.24.1-2
mingw-w64-x86_64-pkgconf 1.8.0-2
mingw-w64-x86_64-python 3.9.13-1
mingw-w64-x86_64-readline 8.1.002-1
mingw-w64-x86_64-sqlite3 3.38.5-1
mingw-w64-x86_64-tcl 8.6.11-5
mingw-w64-x86_64-termcap 1.3.1-6
mingw-w64-x86_64-tk 8.6.11.1-2
mingw-w64-x86_64-tools-git 10.0.0.r32.g89bacd2be-2
mingw-w64-x86_64-tzdata 2022a-1
mingw-w64-x86_64-windows-default-manifest 6.4-4
mingw-w64-x86_64-winpthreads-git 10.0.0.r32.g89bacd2be-1
mingw-w64-x86_64-winstorecompat-git 10.0.0.r32.g89bacd2be-1
mingw-w64-x86_64-xxhash 0.8.1-2
mingw-w64-x86_64-xz 5.2.5-3
mingw-w64-x86_64-zlib 1.2.12-1
mingw-w64-x86_64-zstd 1.5.2-2
mintty 1~3.6.1-1
mpfr 4.1.0.p13-1
msys2-keyring 1~20220522-1
msys2-launcher 1.5-1
msys2-runtime 3.3.5-2
...
我不确定你是否得到结果。
您可以在 Windows 控制台中运行命令:
“C:\msys64\msys2_shell.cmd -mingw32 -shell 测试脚本”
命令及参数注释:
C:\msys64\msys2_shell.cmd : msys 启动bat
-mingw32 : arch,我用的是32位
test-script : /usr/bin 中的启动脚本
并且您需要在启动脚本中设置 $PATH 来启动命令