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

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

有没有一种简单的方法可以运行 cl,而无需在 Visual Studio 命令提示符中运行?

有帮助吗?

解决方案

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

添加到库:

  • C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib
  • C:\Program Files\Microsoft Visual Studio 9.0\VC\lib

这些是最低限度的要求,但对于基本的事情来说应该足够了。研究 vcvarsall.bat 脚本以了解您可能还需要设置哪些内容。

其他提示

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

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

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

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

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

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

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

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

不过我建议不要这样做!

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

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

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

我的版本为 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 仅将该脚本用于非交互目的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top