42

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

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

有没有一种简单的方法来运行 cl 而不必从 Visual Studio 命令提示符中运行?

4

8 回答 8

61

编译器可以像任何其他编译器一样从命令行(或 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

添加到包括:

  • 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 脚本,看看您还想设置什么。

于 2008-09-17T15:29:16.503 回答
24

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

于 2008-09-17T20:04:38.073 回答
6

您可以简单地运行自己设置变量的批处理文件。在 VS08 中,它位于:-

C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat
于 2008-09-17T15:24:06.953 回答
6

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

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

要检查您需要的变量 - 只需从 Windows 开始菜单运行 - x64 Native Tools Command Prompt for VS 2019,然后键入“set path”或“set lib”或“set include”。

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

小路

  • 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

锂电池

  • 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

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

您还可以设置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)

在此处输入图像描述

于 2021-01-20T15:10:49.220 回答
2

vcvars32 或 vsvars32 批处理文件所做的不是火箭科学。他们只需将 PATH、INCLUDE、LIB 以及可能的 LIBPATH 环境变量设置为特定编译器版本的合理默认值。

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

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

于 2008-09-17T17:36:56.663 回答
1

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

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

我建议不要这样做!

于 2008-09-17T15:56:42.863 回答
1

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

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

重申一下:我强烈建议不要尝试手动复制 vcvars 文件为您所做的事情。你一定会错过一些东西,或者让它看起来恰到好处,看起来它正在工作,而实际上做的事情与你想要的略有不同。

于 2009-07-13T18:55:44.397 回答
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仅将脚本用于非交互目的。

于 2012-06-15T15:27:09.347 回答