从普通命令行使用Visual Studio的" cl"
Visual Studio 2003和2005(就我所知,也许还有2008)要求命令行用户在" Visual Studio命令提示符"中运行。启动此命令提示符时,它将设置C ++编译器cl在编译时使用的各种环境变量。
这并不总是可取的。例如,如果我想从Ant内部运行" cl",我想避免不得不从" Visual Studio命令提示符"内部运行Ant。不能选择运行vcvars32.bat,因为在运行cl时(如果从Ant内运行),由vcvars32.bat设置的环境将丢失。
是否有一种简单的方法可以运行cl,而不必从Visual Studio命令提示符下运行?
解决方案
回答
我们只需运行批处理文件即可自行设置变量。在VS08中,它位于:-
C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat
回答
与其他任何编译器一样,可以从命令行(或者makefile)使用这些编译器。我们需要注意的主要事情是INCLUDE和LIB环境变量以及PATH。如果从cmd.exe运行,则只需运行以下.bat即可设置环境:
C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat
如果尝试使用Makefile,Cygwin,MinGW或者类似文件中的编译器,则需要手动设置环境变量。假设编译器安装在默认位置,则该方法适用于Visual Studio 2008编译器和最新的Windows SDK:
添加到PATH:
- C:\ Program Files \ Microsoft SDKs \ Windows \ v6.1 \ Bin
- C:\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ Bin
- C:\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE
添加到包含:
- C:\ Program Files \ Microsoft SDKs \ Windows \ v6.1 \ Include
- C:\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ include
- C:\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ atlmfc \ include
新增至LIB:
- C:\ Program Files \ Microsoft SDKs \ Windows \ v6.1 \ Lib
- C:\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ lib
这些是最低限度的要求,但对于基本事物来说应该足够了。研究vcvarsall.bat脚本以了解我们可能还要设置的内容。
回答
由Visual Studio命令提示符运行的vcvarsall.bat批处理文件只是试图使系统环境变量和路径保持整洁(这对我们有多个版本的Visual Studio非常重要)。
如果我们很乐意将安装程序限制为一个版本,并且环境变量的路径和路径很长,请将这些设置(手动)转移到系统环境变量("我的电脑" |"属性"或者" Win-Pause / Break")。
我还是建议不要这样做!
回答
vcvars32或者vsvars32批处理文件所做的不是火箭科学。他们只是将PATH,INCLUDE,LIB以及可能的LIBPATH环境变量设置为特定编译器版本的明智默认值。
我们要做的就是确保为Ant或者makefile正确设置了这些内容(在调用它们之前或者在其中)。
对于INCLUDE和LIB / LIBPATH,在环境变量中设置这些项目的另一种方法是将这些设置作为显式参数传递给命令行。
回答
创建我们自己的批处理文件(例如clenv.bat),然后调用它而不是cl:
@echo off :: Load compilation environment call "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" :: Invoke compiler with any options passed to this batch file "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.exe" %*
现在可以像cl.exe一样调用clenv.bat,只不过它会先加载所需的环境变量。
回答
诀窍是始终使用正确的vcvars批处理文件。如果我们只安装了Visual Studio的一个版本,那就没什么大问题了。如果我们要处理像我这样的多个版本,则在使用MSVC ++ 15 vcvars文件设置的控制台中运行MSVC ++ 14构建变得非常容易。它可能会也可能不会,但是无论我们得到什么,都将与在VisualStudio中构建的内容有所不同。
我们通过从选定的编译器派生适当的vcvars文件并始终在工具调用内部设置环境的方式来解决这一问题。这样,对于使用的编译器,我们始终拥有正确的vcvars文件。
只是重申一下:我强烈建议我们不要尝试手动复制vcvars文件为我们执行的操作。我们肯定会错过某些东西或者将其弄得恰到好处,以至看起来工作正常,而实际上所做的事情与我们想要的略有不同。