从正常的命令行使用Visual Studio的'cl'

时间:2008-09-17 15:22:39

标签: visual-studio command-line

Visual Studio 2003和2005(也许是我所知道的2008)需要命令行用户在“Visual Studio命令提示符”中运行。启动此命令提示符时,它会设置C ++编译器cl在编译时使用的各种环境变量。

这并不总是令人满意的。例如,如果我想从Ant中运行'cl',我想避免在'Visual Studio命令提示符'中运行Ant。运行vcvars32.bat不是一个选项,因为vcvars32.bat设置的环境在运行cl时会丢失(如果在Ant中运行)。

是否有一种简单的方法来运行cl而无需在Visual Studio命令提示符下运行?

8 个答案:

答案 0 :(得分:51)

编译器可以像命令行(或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:

添加到路径:

  • 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

添加到INCLUDE:

  • 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脚本以查看您可能想要设置的内容。

答案 1 :(得分:21)

创建您自己的批处理文件(比如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,除了它首先会首先加载所需的环境变量。

答案 2 :(得分:6)

您只需运行自行设置变量的批处理文件即可。在VS08中,它位于: -

C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat

答案 3 :(得分:4)

对于硬设置的全局环境系统变量 - 添加到 Path 并创建 Include, LIB

并更改以更正您的版本 MSVC、Windows SDK 和 x86 或 x64。

要检查您需要的变量 - 只需从 Windows 开始菜单运行 - VS 2019 的 x64 本机工具命令提示符 然后键入“设置路径”或“设置 lib”,或“设置包含” .

例如,这是我从 cmd 编译的 env。

路径

  • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\HostX64\x64

包括

  • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\ATLMFC\include
  • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include
  • C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt
  • C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\shared
  • C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\um
  • C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\winrt
  • C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\cppwinrt

LIB

  • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\ATLMFC\lib\x64
  • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\lib\x64
  • C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\ucrt\x64
  • C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64

enter image description here

enter image description here

enter image description here

您还可以设置 CL /MD 变量以生成带有动态链接运行时库的代码,以减少可执行文件的大小 - 因为在默认情况下 /MT - 使用静态链接发布。 也可以灵活地使用和覆盖 cmd 中的选项,但会显示一些关于更改选项的警告消息。 https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/3600tzxa(v=vs.100)

https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/kezkeayy(v=vs.100)

enter image description here

答案 4 :(得分:2)

vcvars32或vsvars32批处理文件的作用不是火箭科学。它们只是将PATH,INCLUDE,LIB和可能的LIBPATH环境变量设置为特定编译器版本的合理默认值。

您所要做的就是确保为Ant或makefile正确设置了这些内容(在调用它们之前或在它们之内)。

对于INCLUDE和LIB / LIBPATH,在环境变量中设置这些项的替代方法是将这些设置作为显式参数传递给命令行。

答案 5 :(得分:1)

由Visual Studio命令提示符运行的vcvarsall.bat批处理文件只是试图让您的系统环境变量和路径保持良好和干净(如果您有多个版本的Visual Studio,这一点非常重要。)

如果您很乐意将设置限制为一个版本并且具有长路径和一组环境变量,请将这些设置(手动)传输到系统环境变量(我的电脑|属性---或Win-Pause / Break) )。

我建议不要这样做!

答案 6 :(得分:1)

诀窍是始终使用正确的vcvars批处理文件。如果您只安装了一个版本的VisualStudio,那不是什么大问题。如果您正在处理像我这样的多个版本,那么在使用MSVC ++ 15 vcvars文件设置的控制台中运行MSVC ++ 14版本变得非常容易。它可能会也可能不会起作用,但无论你得到什么,都会与你在VisualStudio中构建的不同。

我们通过从所选编译器派生适当的vcvars文件并始终在内部为工具调用设置环境,在terp中处理了该问题。这样,您总是拥有正在使用的编译器的正确vcvars文件。

重申一下:我强烈建议您不要手动复制vcvars文件为您所做的事情。你一定会错过一些东西,或者说得恰到好处,看起来它的效果与你想要的东西略有不同。

答案 7 :(得分:0)

我在中打开Visual Studio命令提示符的visual studio命令行的版本。在内部用于构建库/项目,然后使用生成的DLL文件执行一些额外的步骤。

将这些行复制到您的Compile and execute other steps.cmd文件或类似文件。

@echo off

REM Load Visual Studio's build tools
call "%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86

REM Choose what you want to do, 1 or 2 by (un)commenting

REM     1. Add your cl.exe (or msbuild.exe or other) commands here
REM msbuild.exe MyProject.csproj
REM cl.exe
REM custom-step.exe  %*
REM pause

REM     2. Open a normal interactive system command shell with all variables loaded
%comspec% /k

在这个版本的脚本中,我之后会“保持”在交互式命令行模式下。评论REM %comspec% /k仅将脚本用于非交互目的。