我正在尝试构建一个命令行交叉编译批处理脚本以在Visual Studio 2010中编译我的程序(这是唯一的选项,因为msbuild不能与安装文件一起使用)。批处理脚本如下所示(buildall.bat):
if %1 == x86 goto x86
if %1 == x64 goto x64
:x86
%comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86 < crosscompile.bat x86
goto :eof
:x64
%comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86_amd64 < crosscompile.bat x64
goto :eof
其中crosscompile.bat是包含
下面的实际构建命令的文件devenv Studd.sln /clean "Release|%1"
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
devenv Studd.sln /rebuild "Release|%1"
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
问题出在我运行此命令时:
buildall.bat x64
最终运行这个:
D:\x>if "x64" == "" goto all
D:\x>if x64 == x86 goto x86
D:\x>if x64 == x64 goto x64
D:\x>C:\Windows\system32\cmd.exe /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86_amd64 x64 0<crosscompile.bat
Error in script usage. The correct usage is:
"C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" [option]
where [option] is: x86 | ia64 | amd64 | x86_amd64 | x86_ia64
For example:
"C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86_ia64
D:\x>devenv Studd.sln /clean "Release|%1"
'devenv' is not recognized as an internal or external command,
operable program or batch file.
D:\x>IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
D:\x>goto :eof
问题出在这里
D:\x>C:\Windows\system32\cmd.exe /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86_amd64 x64 0<crosscompile.bat
我原来的批处理脚本说:
%comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86_amd64 < crosscompile.bat x64
我似乎无法理解为什么在crosscompile.bat之后需要x64(这是它的参数)并将它放在它之前并引入0?
如果我为crosscompile.bat(x86和x64)编写2个单独的脚本,我没有传递任何参数,它可以正常工作。但我想重用crosscompile.bat,以便我如何才能完成这项工作。我在这里做错了什么?
答案 0 :(得分:1)
cmd /k vcvarsall.bat x86_amd64 < crosscompile.bat x64
这意味着:使用从文件重定向的输入流(磁盘中的文件,而不是执行)crosscompile.bat
启动cmd实例,并且cmd实例的参数是该行的其余部分,即,/k vcvars.bat x86_amd64 x64
这样做容易得多
cmd /k " "vcvarsall.bat" x86_amd64 & "crosscompile.bat" x64"
初始化变量,然后调用compile bat。
已编辑这是我用于测试的命令行。
"%comspec%" /k " "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 & "c:\testvc.bat" x86"