观察“Visual Studio 2005 命令提示”的属性,发现运行“Visual Studio 2005 命令提示”即运行
%comspec% /k ""d:\Microsoft Visual Studio 8\VC\vcvarsall.bat"" x86
其中comspec即%SystemRoot%\system32\cmd.exe,故以上命令行即“以x86为参数,运行vcvarsall.bat批处理文件”
查看vcvarsall.bat文件的源代码
@echooff
if
"
%1
"
==
""
gotox86
ifnot
"
%2
"
==
""
gotousage
if/i%
1
==
x86gotox86
if/i%
1
==
amd64gotoamd64
if/i%
1
==
x64gotoamd64
if/i%
1
==
ia64gotoia64
if/i%
1
==
x86_amd64gotox86_amd64
if/i%
1
==
x86_ia64gotox86_ia64
gotousage
:x86
ifnotexist
"
%~dp0binvcvars32.bat
"
gotomissing
call
"
%~dp0binvcvars32.bat
"
goto:eof
:amd64
ifnotexist
"
%~dp0binamd64vcvarsamd64.bat
"
gotomissing
call
"
%~dp0binamd64vcvarsamd64.bat
"
goto:eof
:ia64
ifnotexist
"
%~dp0binia64vcvarsia64.bat
"
gotomissing
call
"
%~dp0binia64vcvarsia64.bat
"
goto:eof
:x86_amd64
ifnotexist
"
%~dp0bin_amd64vcvarsx86_amd64.bat
"
gotomissing
call
"
%~dp0bin_amd64vcvarsx86_amd64.bat
"
goto:eof
:x86_ia64
ifnotexist
"
%~dp0bin_ia64vcvarsx86_ia64.bat
"
gotomissing
call
"
%~dp0bin_ia64vcvarsx86_ia64.bat
"
goto:eof
:usage
echoErrorinscriptusage.Thecorrectusageis:
echo%
0
[
option
]
echowhere
[
option
]
is:x86^|ia64^|amd64^|x86_amd64^|x86_ia64
echo:
echoForexample:
echo%
0
x86_ia64
goto:eof
:missing
echoThespecifiedconfigurationtypeismissing.Thetoolsforthe
echoconfigurationmightnotbeinstalled.
goto:eof
不难发现,实际运行的代码是
:x86
if not exist "%~dp0bin\vcvars32.bat" goto missing
call "%~dp0bin\vcvars32.bat"
goto :eof
即运行当前目录下的bin目录下的vcvars32.bat文件,这个文件的内容非常简单,如下:
"%VS80COMNTOOLS%vsvars32.bat"
其中VS80COMNTOOLS为系统变量,在我的机器上取值d:\Microsoft Visual Studio 8\Common7\Tools\
故找到该目录,并查看其下的vsvars32.bat,代码如下
@SETVSINSTALLDIR
=
d:MicrosoftVisualStudio
8
@SETVCINSTALLDIR
=
d:MicrosoftVisualStudio
8
VC
@SETFrameworkDir
=
C:WINDOWSMicrosoft.NETFramework
@SETFrameworkVersion
=
v2
.0.50727
@SETFrameworkSDKDir
=
d:MicrosoftVisualStudio
8
SDKv2
.0
@if
"
%VSINSTALLDIR%
"
==
""
gotoerror_no_VSINSTALLDIR
@if
"
%VCINSTALLDIR%
"
==
""
gotoerror_no_VCINSTALLDIR
@echoSettingenvironmentforusingMicrosoftVisualStudio
2005
x86tools.
@rem
@remRootofVisualStudioIDEinstalledfiles.
@rem
@setDevEnvDir
=
d:MicrosoftVisualStudio
8
Common7IDE
@setPATH
=
d:MicrosoftVisualStudio
8
Common7IDE
;
d:MicrosoftVisualStudio8VCBIN;d:MicrosoftVisualStudio8Common7Tools;d:MicrosoftVisualStudio8Common7Toolsin;d:MicrosoftVisualStudio8VCPlatformSDKin;d:MicrosoftVisualStudio8SDKv2.0in;C:WINDOWSMicrosoft.NETFrameworkv2.0.50727;d:MicrosoftVisualStudio8VCVCPackages;%PATH%
@setINCLUDE
=
d:MicrosoftVisualStudio
8
VCATLMFCINCLUDE
;
d:MicrosoftVisualStudio8VCINCLUDE;d:MicrosoftVisualStudio8VCPlatformSDKinclude;d:MicrosoftVisualStudio8SDKv2.0include;%INCLUDE%
@setLIB
=
d:MicrosoftVisualStudio
8
VCATLMFCLIB
;
d:MicrosoftVisualStudio8VCLIB;d:MicrosoftVisualStudio8VCPlatformSDKlib;d:MicrosoftVisualStudio8SDKv2.0lib;%LIB%
@setLIBPATH
=
C:WINDOWSMicrosoft.NETFrameworkv2
.0.50727
;
d:MicrosoftVisualStudio8VCATLMFCLIB
@gotoend
:error_no_VSINSTALLDIR
@echoERROR:VSINSTALLDIRvariableisnotset.
@gotoend
:error_no_VCINSTALLDIR
@echoERROR:VCINSTALLDIRvariableisnotset.
@gotoend
:end
不能发现此文件的作用即为完成与VS2005相关的一些系统变量的设置,如:
VSINSTALLDIR——VS2005的安装路径;
VCINSTALLDIR——VC的安装路径;
FrameworkDir——Framework2.0的安装路径;
等等。
这样,如果我们需要自己写一个批处理文件,完成一些VS2005相关的设置,调用VS2005提供的一些工具(如gacutil,该工具在 D:\Microsoft Visual Studio 8\SDK\v2.0\Bin目录下,该目录没有被Path系统变量引用,故该命令无法直接在cmd中运行),就可以在批处理文件的开头先调用 vsvars32.bat,然后在调用VS2005的相关工具。代码举例如下:
call "%VS80COMNTOOLS%vsvars32.bat"
gacutil /i YejunWorkshop.IDUControlLibrary.Design.dll
该批处理文件直接运行即可将YejunWorkshop.IDUControlLibrary.Design.dll程序集添加到GAC中。
本文解析了Visual Studio 2005命令提示的工作原理,详细介绍了vcvarsall.bat批处理文件如何配置环境变量以支持不同架构的编译工作,并提供了调用相关工具的示例。
1688

被折叠的 条评论
为什么被折叠?



