2013-01-16 119 views
2

我可以从命令行运行vcvarsall.bat,然后运行cl.exe与我的源文件作为唯一参数进行编译。问题是只运行cl.exe没有先使用上述批处理文件设置环境会导致由于“缺少库”而导致的错误。如何设置Vim以使用Visual Studio 2010的C++编译器进行编译?

我可以为此画出几个解决方法,例如在我的项目目录中创建一个批处理文件,其中包括vcvarsall.bat并执行所有编译。尽管如此,这似乎是一个非常麻烦和僵化的解决方案。我更希望能够编译像一个会在Unix上运行在Vim任何C或C++文件:

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

我不希望添加的路径一堆vcvarsall.bat增加永久的环境。我不知道如何将我的问题说成比这更好:我如何设置Vim才能使用Visual Studio 2010 C++编译器?

+0

你能编写自己的脚本,调用vcvars加载变量,然后调用编译器?或者,您可以运行vcvars并在shell中运行vim ... –

回答

3

您可以从Vim内更新环境变量。例如,添加 “C:\富” 到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。但是你可以只将这些改变包括在内。

+0

这些更改是否必须是Vim的全局变量,还是可以设置为缓冲区到缓冲区? – Hubro

+0

他们改变了Vim进程的*环境,所以是的,它们是全局的。 – Mud

0

扩大由大卫·罗德里格斯的评论 - 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上的处理方式与在Unix上的make <target>处理方式差不多。

0

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>

相关问题