关于VC为命令行生成设置路径和环境变量
最近在做一些与SDK相关的东西时,要直接用命令行编译源代码,然后生成可执行文件。于是研究了一下,现在把我的心得简单写一下,方便以后自己或大家不知道如何设置时查看。
方法一:
其实VC安装目录中有个批处理文件(.bat)可以直接帮我们设置好环境变量的(不知道低版本的VC有没有)。msdn教程链接如下:
32位:http://msdn.microsoft.com/zh-cn/library/f2ccy3wt.aspx @echo Setting environment for using Microsoft Visual Studio 2010 x86 tools.
@call :GetVSCommonToolsDir @if "%VS100COMNTOOLS%"=="" goto error_no_VS100COMNTOOLSDIR
@call "%VS100COMNTOOLS%VCVarsQueryRegistry.bat" 32bit No64bit
@if "%VSINSTALLDIR%"=="" goto error_no_VSINSTALLDIR @if "%FrameworkDir32%"=="" goto error_no_FrameworkDIR32 @if "%FrameworkVersion32%"=="" goto error_no_FrameworkVer32 @if "%Framework35Version%"=="" goto error_no_Framework35Version
@set FrameworkDir=%FrameworkDir32% @set FrameworkVersion=%FrameworkVersion32%
@if not "%WindowsSdkDir%" == "" ( @set "PATH=%WindowsSdkDir%bin\NETFX 4.0 Tools;%WindowsSdkDir%bin;%PATH%" @set "INCLUDE=%WindowsSdkDir%include;%INCLUDE%" @set "LIB=%WindowsSdkDir%lib;%LIB%" )
@rem @rem Root of Visual Studio IDE installed files. @rem @set DevEnvDir=%VSINSTALLDIR%Common7\IDE\
@rem PATH @rem ---- @if exist "%VSINSTALLDIR%Team Tools\Performance Tools" ( @set "PATH=%VSINSTALLDIR%Team Tools\Performance Tools;%PATH%" ) @if exist "%ProgramFiles%\HTML Help Workshop" set PATH=%ProgramFiles%\HTML Help Workshop;%PATH% @if exist "%ProgramFiles(x86)%\HTML Help Workshop" set PATH=%ProgramFiles(x86)%\HTML Help Workshop;%PATH% @if exist "%VCINSTALLDIR%VCPackages" set PATH=%VCINSTALLDIR%VCPackages;%PATH% @set PATH=%FrameworkDir%%Framework35Version%;%PATH% @set PATH=%FrameworkDir%%FrameworkVersion%;%PATH% @set PATH=%VSINSTALLDIR%Common7\Tools;%PATH% @if exist "%VCINSTALLDIR%BIN" set PATH=%VCINSTALLDIR%BIN;%PATH% @set PATH=%DevEnvDir%;%PATH%
@if exist "%VSINSTALLDIR%VSTSDB\Deploy" ( @set "PATH=%VSINSTALLDIR%VSTSDB\Deploy;%PATH%" )
@if not "%FSHARPINSTALLDIR%" == "" ( @set "PATH=%FSHARPINSTALLDIR%;%PATH%" )
@rem INCLUDE @rem ------- @if exist "%VCINSTALLDIR%ATLMFC\INCLUDE" set INCLUDE=%VCINSTALLDIR%ATLMFC\INCLUDE;%INCLUDE% @if exist "%VCINSTALLDIR%INCLUDE" set INCLUDE=%VCINSTALLDIR%INCLUDE;%INCLUDE%
@rem LIB @rem --- @if exist "%VCINSTALLDIR%ATLMFC\LIB" set LIB=%VCINSTALLDIR%ATLMFC\LIB;%LIB% @if exist "%VCINSTALLDIR%LIB" set LIB=%VCINSTALLDIR%LIB;%LIB%
@rem LIBPATH @rem ------- @if exist "%VCINSTALLDIR%ATLMFC\LIB" set LIBPATH=%VCINSTALLDIR%ATLMFC\LIB;%LIBPATH% @if exist "%VCINSTALLDIR%LIB" set LIBPATH=%VCINSTALLDIR%LIB;%LIBPATH% @set LIBPATH=%FrameworkDir%%Framework35Version%;%LIBPATH% @set LIBPATH=%FrameworkDir%%FrameworkVersion%;%LIBPATH%
@goto end
@REM ----------------------------------------------------------------------- :GetVSCommonToolsDir @set VS100COMNTOOLS= @call :GetVSCommonToolsDirHelper32 HKLM > nul 2>&1 @if errorlevel 1 call :GetVSCommonToolsDirHelper32 HKCU > nul 2>&1 @if errorlevel 1 call :GetVSCommonToolsDirHelper64 HKLM > nul 2>&1 @if errorlevel 1 call :GetVSCommonToolsDirHelper64 HKCU > nul 2>&1 @exit /B 0
:GetVSCommonToolsDirHelper32 @for /F "tokens=1,2*" %%i in ('reg query "%1\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v "10.0"') DO ( @if "%%i"=="10.0" ( @SET "VS100COMNTOOLS=%%k" ) ) @if "%VS100COMNTOOLS%"=="" exit /B 1 @SET "VS100COMNTOOLS=%VS100COMNTOOLS%Common7\Tools\" @exit /B 0
:GetVSCommonToolsDirHelper64 @for /F "tokens=1,2*" %%i in ('reg query "%1\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" /v "10.0"') DO ( @if "%%i"=="10.0" ( @SET "VS100COMNTOOLS=%%k" ) ) @if "%VS100COMNTOOLS%"=="" exit /B 1 @SET "VS100COMNTOOLS=%VS100COMNTOOLS%Common7\Tools\" @exit /B 0
@REM ----------------------------------------------------------------------- :error_no_VS100COMNTOOLSDIR @echo ERROR: Cannot determine the location of the VS Common Tools folder. @goto end
:error_no_VSINSTALLDIR @echo ERROR: Cannot determine the location of the VS installation. @goto end
:error_no_FrameworkDIR32 @echo ERROR: Cannot determine the location of the .NET Framework 32bit installation. @goto end
:error_no_FrameworkVer32 @echo ERROR: Cannot determine the version of the .NET Framework 32bit installation. @goto end
:error_no_Framework35Version @echo ERROR: Cannot determine the .NET Framework 3.5 version. @goto end
:end
64位:http://msdn.microsoft.com/zh-cn/library/x4d2c09s.aspx
简单的来说,就是找到 Visual
C++ 安装的目录。(VS2010默认情况下,完整路径为 C:\Program Files\Microsoft Visual Studio
10\VC\),64位的直接运行其中的vcvarsall.bat,32位的转到bin子目录运行vcvars32.bat。
方法二:
如果方法一不可行,或者没找到那个批处理文件,那么我们就自己设置吧。
其实批处理文件中就是帮我们设置一堆路径,但是有一些不一定是必要的,所以我这里就说说几个重要的、在正常情况下设置了就可以编译的环境变量。
以下变量名大小写不区分。%VCINSTALLDIR%为VC的安装路径,VS2010默认为C:\Program Files\Microsoft Visual Studio
10\VC\,%DevEnvDir%为Visual Studio .NET的安装路径,VS2010默认为C:\Program Files\Microsoft Visual Studio
10\ Common7\IDE\
变量名:INCLUDE
变量值:%VCINSTALLDIR%\INCLUDE
变量名:LIB
变量值:%VCINSTALLDIR%\LIB
变量名:PATH
变量值: %VCINSTALLDIR%\BIN;%DevEnvDir%
以上是一些基本的环境变量,当然一般来说可能还会包含WindowsSDK,%WindowsSdkDir%为WindowsSdk的安装路径,一般为C:\Program Files\Microsoft
SDKs\Windows\v7.0A\。
PATH=%WindowsSdkDir%\bin
INCLUDE=%WindowsSdkDir%\include
LIB=%WindowsSdkDir%\lib
除此之外,如果有一些需要自己包含的路径就自己添加啦。
设置好环境变量之后就可以用cl.exe在命令行中编译.cpp文件了。
PS:cl.exe、rc.exe、link.exe分别为VC代码编译器、资源编译器和链接器。cl.exe编译源代码为中间文件(.obj)、rc.exe编译资源描述文件为资源文件(.rc)后, link.exe链接程序。而平常我们在 VC工程中配置的一些参数,实际上是cl.exe或者link.exe后面加上一些参数而已。
|