如何设置 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 环境中运行任何<command>
,方法是:
vc.bat <command>
如果不带参数调用,它只会为当前shell设置环境,而不执行任何进一步的命令。
如果您想更进一步,可以使用 CMake,这是一个元构建系统,可让您从单一(CMake 语法)配置生成 Unix Makefile、MSVC 解决方案和其他几种构建文件类型。 Windows 上支持的构建文件类型之一是 NMake Makefiles... 和 nmake <target>
在 Windows 上的处理方式与 make <target>
在 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 <F8> :!vcvarsall.bat && cl /EHsc % <CR>
【讨论】:
“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 程序?
如何设置 TFS 2013 以使用 Visual Studio 2013 或 Visual Studio 2017 构建