在普通命令行中使用Visual Studio的'cl'命令

43

Visual Studio 2003和2005(也许包括2008)需要在“Visual Studio命令提示符”下运行命令行用户。当启动此命令提示符时,它会设置各种环境变量,用于C++编译器cl在编译时使用。

但这并非总是理想的解决方案。例如,如果我想从Ant中运行“cl”,就希望避免必须在“Visual Studio命令提示符”中运行Ant。运行vcvars32.bat不是一个选项,因为如果从Ant中运行,则vcvars32.bat设置的环境将在运行cl时丢失。

有没有一种简单的方法可以在不必在Visual Studio命令提示符中运行的情况下运行cl?

8个回答

64
编译器可以像其他编译器一样从命令行(或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 添加到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脚本,了解您可能需要进行哪些其他设置。

根据版本的不同,文件可能位于不同的路径下。例如,我已经安装了构建工具,路径是 C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build - Stefnotch

23

创建自己的批处理文件(比如clenv.bat),并调用它而不是使用cl:

Create your own batch file (say clenv.bat), and call that instead of 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,只不过它会先加载所需的环境变量。


7

您可以直接运行批处理文件来设置变量。在VS08中,它位于:

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

7

对于全局环境系统变量的硬编码 - 可将其添加到 Path 中并创建 Include、LIB

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

要检查所需的变量 - 可在 Windows 开始菜单中简单地运行 x64 Native Tools Command Prompt for VS 2019,然后键入 "set path"、"set lib" 或 "set include"。

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

Path

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

Include

  • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\ATLMFC\lib\x86
  • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\lib\x86
  • C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\ucrt\x86
  • C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x86
  • 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://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/3600tzxa(v=vs.100)

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

enter image description here


1
2021年适用的静态配置最佳答案 - João Haas

2

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

你所要做的就是确保这些内容对于你的Ant或makefile已经正确设置(要么在调用它们之前,要么在其中设置)。

对于INCLUDE和LIB/LIBPATH,除了将这些项设置为环境变量之外,另一种方法是通过命令行传递这些设置作为显式参数。


1

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

我们通过从所选编译器派生正确的vcvars文件并始终在工具调用内部设置环境来解决了terp中的这个问题。这样,您始终拥有正确的vcvars文件以供使用。

再次强调:我强烈建议不要尝试手动复制vcvars文件为您完成的工作。您很可能会错过某些内容或者刚好做得足够好,看起来像是在工作,但实际上与您想要的略有不同。


1

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

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

不过,我建议不要这样做!


0

我打开 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

谢谢,但是在我上面的解决方案中,可以简单编译而不必等待设置环境的时间。 - Redee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接