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

Posted

技术标签:

【中文标题】如何设置 Vim 以使用 Visual Studio 2010 的 C++ 编译器进行编译?【英文标题】:How do I set up Vim to compile using Visual Studio 2010's C++ compiler? 【发布时间】:2013-01-16 22:24:38 【问题描述】:

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

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

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

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

【问题讨论】:

能否编写自己的脚本,调用 vcvars 来加载变量,然后调用编译器?或者,您可以运行 vcvars 并在 shell 中运行 vim... 【参考方案1】:

您可以在 Vim 中更新环境变量。例如,将“c:\foo”添加到 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。但是您可以始终包含这些更改。

【讨论】:

这些更改对 Vim 来说必须是全局的,还是可以在缓冲区到缓冲区的基础上进行设置? 它们改变了 Vim 进程的 环境,所以是的,它们是全局的。 哇,这比我运行 vcvars、前后比较以及尝试在脚本中解析结果要简单得多...【参考方案2】:

扩展 David Rodríguez - dribeas 的评论,并查看 vcvarsall.bat 如何接受参数,我发现在我的源代码树中包含以下文件很有帮助:

vc.bat:

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

根据需要调整 MSVS 版本和平台,或者根据需要将它们设置为附加参数。 %VS...COMNTOOLS% 环境变量由 MSVC 安装程序设置,这使得上述内容与实际安装路径无关。

这允许我在适当的 MSVC 环境中运行任何&lt;command&gt;,方法是:

vc.bat <command>

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

如果您想更进一步,可以使用 CMake,这是一个元构建系统,可让您从单一(CMake 语法)配置生成 Unix Makefile、MSVC 解决方案和其他几种构建文件类型。 Windows 上支持的构建文件类型之一是 NMake Makefiles... 和 nmake &lt;target&gt; 在 Windows 上的处理方式与 make &lt;target&gt; 在 Unix 上的处理方式差不多。

【讨论】:

【参考方案3】:

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

由于我不想在我的 vim 配置中携带 .bat 文件,所以我正在寻找一种只能在 .vimrc 内工作的解决方案:

    将 vcvarsall.bat 添加到您的 PATH。在我的情况下c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC

    在你的 .vimrc 中加入以下内容,通过 F8 编译当前文件

    nnoremap &lt;F8&gt; :!vcvarsall.bat &amp;&amp; cl /EHsc % &lt;CR&gt;

【讨论】:

“Mud 的解决方案不适用于 Visual Studio 2017 社区。路径不同。” 这就是我所说的“根据需要适应您的版本Visual Studio 和安装目录。"显然使用 vcvars.bat 是可行的,但是从 Vim 运行它不会改变 Vim 的环境。我的方法是展示如何更改 Vim 的环境而无需重新启动 Vim。您的方法也有效,但这不适用于 Vim 的 :make 命令,也不能让您执行任意 VS 工具,而无需在每个命令前加上该 bat。我宁愿更新 Vim 的环境。

以上是关于如何设置 Vim 以使用 Visual Studio 2010 的 C++ 编译器进行编译?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2010 中更改 vim 光标的颜色

如何在 Windows 7 上使用 Vim 的“make”命令和 Visual Studio 的编译器编译 C 程序?

Vim复制剪切粘贴设置行号等技巧

Vim复制剪切粘贴设置行号等技巧

如何设置 TFS 2013 以使用 Visual Studio 2013 或 Visual Studio 2017 构建

使用 vs 代码设置 nuxt/vue 调试的语法错误