我遇到了一个非常奇怪的行为,旧的批处理文件在 Windows XP 下运行良好。为什么在(Vs2017 + Win10)下用批处理文件在cmd窗口编译一个简单的文件如hello.c
不行?
当意识到Win10有新的安全策略时,我在微软的网站上看了一些文章他们推荐使用开发者命令行窗口进行命令行编译。
确实,手动操作效果很好。但是当我以 super 管理员身份登录Win10并尝试通过批处理文件运行所有内容时, 没用,刚刚环境配置完。
手动运行批处理文件中的命令时,一切正常(成功生成可执行文件)。 这有什么问题?
批处理文件的内容如下:
%comspec% /k "C:\Program Files(x86)\Microsoft Visual Studio\2017 \Community\VC\Auxiliary\Build\vcvars64.bat"
cd g:\testdir
g:
cl TestBatFileCompile.c
最佳答案
初步说明:
- vcvars64.bat 简单地调用 vcvarsall.bat 并将 x64 参数传递给它,然后是它自己的(如果有的话)
- vcvarsall.bat 主要设置 VStudio 构建所需的一些环境变量(
在运行它之前设置 VSCMD_DEBUG=3
,用于详细输出)工作的工具。检查[MS.Docs]: Build C/C++ code on the command line了解更多详情
为了更加清晰,我增强/简化了您的示例:
script.bat:
@echo off
echo Running vcvars...
%comspec% /K "c:\Install\x86\Microsoft\Visual Studio Community\2017\VC\Auxiliary\Build\vcvarsall.bat" x64
echo Ran vcvars: %ERRORLEVEL%
echo Running cl...
cl /nologo dummy.c /link /NOLOGO
echo Ran cl: %ERRORLEVEL%
dummy.c:
int main() {
return 0;
}
输出:
e:\Work\Dev\StackOverflow\q053523085>dir /b dummy.c script.bat e:\Work\Dev\StackOverflow\q053523085>script.bat Running vcvars... ********************************************************************** ** Visual Studio 2017 Developer Command Prompt v15.9.2 ** Copyright (c) 2017 Microsoft Corporation ********************************************************************** [vcvarsall.bat] Environment initialized for: 'x64' e:\Work\Dev\StackOverflow\q053523085>rem HMMM, SOMETHING DOESN'T SEEM QUITE RIGHT. LET'S TRY EXITING CMD... e:\Work\Dev\StackOverflow\q053523085>exit Ran vcvars: 0 Running cl... 'cl' is not recognized as an internal or external command, operable program or batch file. Ran cl: 9009
发生了什么?
cmd/K
( [MS.Docs]: Cmd ) 在现有实例之上打开了一个新的 cmd 实例(使用相同的窗口)- vcvarsall 在此(第 2nd)实例中被调用,完成了它的工作并完成了,事情似乎悬而未决
- 但是在键入exit 后,结果是cl 确实运行了,但是在第1 cmd 实例(在后台,如果你愿意的话),并且由于变量之前不是由 vcvarsall 设置的,所以它失败了
要使事情正常进行,请使用 [MS.Docs]: call 调用 vcvarsall :
call "c:\Install\x86\Microsoft\Visual Studio Community\2017\VC\Auxiliary\Build\vcvarsall.bat" x64
输出(在新的 cmd 窗口中):
e:\Work\Dev\StackOverflow\q053523085>dir /b dummy.c script.bat e:\Work\Dev\StackOverflow\q053523085>script.bat Running vcvars... ********************************************************************** ** Visual Studio 2017 Developer Command Prompt v15.9.2 ** Copyright (c) 2017 Microsoft Corporation ********************************************************************** [vcvarsall.bat] Environment initialized for: 'x64' Ran vcvars: 0 Running cl... dummy.c Ran cl: 0 e:\Work\Dev\StackOverflow\q053523085>dir /b dummy.c dummy.exe dummy.obj script.bat
关于windows - 从批处理文件启动时,Visual Studio 2017 命令行工具不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53523085/