【问题标题】:Using Visual Studio's 'cl' from a normal command line从普通命令行使用 Visual Studio 的“cl”
【发布时间】:2008-09-17 15:22:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: visual-studio command-line


    【解决方案1】:

    编译器可以像任何其他编译器一样从命令行(或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 脚本,看看您还想设置什么。

    【讨论】:

      【解决方案2】:

      创建您自己的批处理文件(比如 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" %*
      

      clenv.bat 现在可以像 cl.exe 一样被调用,只是它会首先加载所需的环境变量。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          对于硬设置的全局环境系统变量 - 添加到 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 年静态配置的最佳答案
          【解决方案5】:

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

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

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

          【讨论】:

            【解决方案6】:

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

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

            我建议不要这样做!

            【讨论】:

              【解决方案7】:

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

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

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

              【讨论】:

                【解决方案8】:

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

                【讨论】:

                • 谢谢,但在我上面的解决方案中进行简单编译,无需等待时间设置环境。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-02-02
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多