任务:使用 devenv commnd line 编译 VS 2010 工程。
使用 devenv 编译工程,要保证工程所需的 VC++目录 (VC++ Directories) 设置正确才能编译成功。
IDE 工程右键-> Properties -> Configuration Properties -> VC++ Directories
当前工程,需要导入正确的环境变量 PATH , INCLUDE, LIB,才能编译成功。IDE 工程的设置如上所示。
每台工作机的环境变量设置不尽相同,为了保证编译的正常进行,使用 devenv 前,需要手动完整设置环境变量。
为避免改变当前工作机的环境变量,在脚本中把变量设置为“局部”变量,脚本运行完毕后,变量随即失效,使用 SETLOCAL 命令。
脚本如下:
1 ECHO OFF 2 3 SETLOCAL ENABLEEXTENSIONS 4 SETLOCAL ENABLEDELAYEDEXPANSION 5 6 SET VCInstallDir=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC 7 SET VCIDEDIR=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE 8 SET WindowsSdkDir=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A 9 SET FrameworkSDKDir=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A 10 11 SET LIB=%VCInstallDir%\lib;%VCInstallDir%\atlmfc\lib;%WindowsSdkDir%\lib\;%LIB% 12 SET INCLUDE=%VCInstallDir%\include\;%VCInstallDir%\atlmfc\include\;%WindowsSdkDir%\include 13 SET MSBuildToolsPath32=C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319 14 15 SET PATH=%VCIDEDIR%;%VCInstallDir%\bin;%WindowsSdkDir%\bin\NETFX 4.0 Tools;%WindowsSdkDir%\bin;%VS100COMNTOOLS%;%SystemRoot%\system32;%PATH%; 16 17 DEVENV /useenv "Projects\MySolution.sln" /Rebuild Debug /out out.log 18 19 ENDLOCAL ENABLEDELAYEDEXPANSION 20 ENDLOCAL ENABLEEXTENSIONS
下面介绍由于环境变量设置缺失而导致的编译错误。
1> 12 行缺失,会导致如下error
fatal error C1083: Cannot open include file: 'excpt.h': No such file or directory
Need to include correct libraries.
INCLUDE 环境变量设置不完整,需要导入所需要的所有 include 路径。
2> 11 行缺失,会导致如下 error
LINK : fatal error LNK1104: cannot open file 'LIBCMT.lib'
LIB 环境变量设置不完整,需要导入所需要的所有 lib 路径。
3> error MSB6006: "mt.exe" exited with code 1
由于 PATH 环境变量设置的不完整导致,加入如下路径清除该 error.
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin
4> RC : fatal error RC1106: invalid option: -ologo
由于在编译过程中,使用了 6.x 版本的 SDK,而 6.x 版本的 SDK 所包含的 RC.exe 不支持 -nologo 开关,所以就出现了上面的错误。
需要转换成 7.0A 版本的 SDK。
注意:
PATH 变量中 各个路径的前后顺序也需要十分谨慎。
如果在 PATH 变量中同时设置了 6.0A ,7.0A 或 更低版本 的 SDK 路径,那么 7.0A 的路径务必要先于 6.0A 或更低版本的 SDK 路径。
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bin or C:\Program Files\Microsoft SDK\Bin\