如何设置 Vim 以使用 Visual Studio 2010 的 C++ 编译器进行编译?

问题描述 投票:0回答:4

我可以通过运行 vcvarsall.bat 从命令行进行编译,然后运行 cl.exe 并将我的源文件作为唯一参数。问题是只运行 cl.exe 而没有首先使用上述批处理文件设置环境会导致由于“缺少库”而导致的错误。

我可以想象一些解决方法,例如在我的项目目录中创建一个批处理文件,其中包含 vcvarsall.bat 并进行所有编译。不过,在我看来,这是一个非常麻烦且不灵活的解决方案。我更希望能够像在 Unix 中那样从 Vim 编译和运行任何 C 或 C++ 文件:

:nnorebind <F5> :! g++ %<CR>

我不想添加 vcvarsall.bat 永久添加到环境中的一堆路径。我不知道如何更好地表达我的问题:How do I set up Vim to able to use the Visual Studio 2010 C++ compiler?

c++ windows visual-studio-2010 visual-c++ vim
4个回答
4
投票

你可以在 Vim 中更新环境变量。例如,要将“c: oo”添加到 PATH 的开头:

let $PATH='c:\\foo;'.$PATH

我将我的 vcvars*.bat 文件的相关部分复制到我的 vimrc 中:

if !exists("visual_studio_paths_added")
    let visual_studio_paths_added = 1
    let $PATH="C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\IDE;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\BIN;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\Tools;C:\\Windows\\Microsoft.NET\\Framework\\v3.5;C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\VCPackages;C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\bin;".$PATH
    let $INCLUDE="C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\ATLMFC\\INCLUDE;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\INCLUDE;C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\include;".$INCLUDE
    let $LIB="C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\ATLMFC\\LIB;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\LIB;C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\lib;".$LIB
    let $LIBPATH="C:\\Windows\\Microsoft.NET\\Framework\\v3.5;C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\ATLMFC\\LIB;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\LIB;".$LIBPATH
endif

根据您的 Visual Studio 版本和安装目录进行调整。

在我的例子中,我把它放在一个函数中。当我想使用 Visual Studio 时,我会调用

:vcvars
。但是您可以始终包含这些更改。


1
投票

扩展 David Rodríguez - dribeas 的评论,看看

vcvarsall.bat
是如何接受参数的,我发现在我的源代码树中包含以下文件很有帮助:

vc.bat

call "%VS100COMNTOOLS%\..\..\VC\vcvarsall.bat" amd64 & %*

根据需要调整MSVS版本和平台,或者根据需要为其添加附加参数。

%VS...COMNTOOLS%
环境变量由 MSVC 安装程序设置,这使得上述与实际安装路径无关。

这允许我在适当的 MSVC 环境中运行任何

<command>
,方法是将其运行为:

vc.bat <command>

如果不带参数调用,它只会为当前 shell 设置环境,而不执行任何进一步的命令。

如果您想更进一步,可以使用 CMake,这是一个元构建系统,允许您从单个(CMake 语法)配置生成 Unix Makefile、MSVC 解决方案和其他几种构建文件类型。 Windows 支持的构建文件类型之一是 NMake Makefiles... 和

nmake <target>
在 Windows 上的处理与
make <target>
在 Unix 上的处理一样好。


0
投票

你可以使用插件vcvars.vim来设置环境变量。

在 Neovim 中,使用 lazy.nvim 作为包管理器,可以通过 vcvars.vim 设置环境变量

    {
        "hattya/vcvars.vim",
        event = "VeryLazy",
        config = function()
            vim.cmd([[
            let vcvars_dict = vcvars#get(vcvars#list()[-1])
            let $PATH = join(vcvars_dict.path, ';') .';'. $PATH
            let $INCLUDE = join(vcvars_dict.include, ';') .';'. $INCLUDE
            let $LIB = join(vcvars_dict.lib, ';') .';'. $LIB
            let $LIBPATH = join(vcvars_dict.libpath, ';') .';'. $LIBPATH
            ]])
        end,
    },

-1
投票

Mud 的解决方案不适用于 Visual Studio 2017 Community。路径不同。我认为 DevSolar 使用 vcvarsall.bat 的方式更可靠,因为它让 VS 处理正确的路径。

因为我不想在我的 vim 配置中携带 .bat 文件,所以我一直在寻找一个只在 .vimrc 中工作的解决方案:

  1. 将 vcvarsall.bat 添加到您的路径中。就我而言
    c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
    .
  2. 将以下内容放入您的 .vimrc 以通过 F8 编译当前文件

    nnoremap <F8> :!vcvarsall.bat && cl /EHsc % <CR>

© www.soinside.com 2019 - 2024. All rights reserved.