2

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

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

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

不过,我不想将vcvarsall.bat添加到环境中的一堆路径永久添加。我不知道如何更好地表达我的问题:如何设置 Vim 以使用 Visual Studio 2010 C++ 编译器?

4

3 回答 3

4

你可以在 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 版本和安装目录进行调整。

就我而言,我把它放在一个函数中。:vcvars当我想使用 Visual Studio 时,我会打电话。但是您可以始终包含这些更改。

于 2013-01-16T23:20:38.317 回答
1

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

vc.bat

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

酌情调整 MSVS 版本和平台,或根据需要添加额外参数。环境变量由%VS...COMNTOOLS%MSVC 安装程序设置,这使得上面的内容与实际安装路径无关。

这允许我<command>在适当的 MSVC 环境中运行它,方法是:

vc.bat <command>

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

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

于 2015-07-17T11:50:10.797 回答
-1

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

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

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

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

于 2017-05-19T05:08:46.783 回答