我可以通过运行 vcvarsall.bat 从命令行编译,然后以源文件作为唯一参数运行 cl.exe 。问题是,如果没有先使用上述批处理文件设置环境,只运行 cl.exe 会因“缺少库”而导致错误。
我可以想一些相关的解决方法,例如在我的项目目录中创建一个包含 vcvarsall.bat 的批处理文件并完成所有编译。在我看来,这似乎是一个非常麻烦和不灵活的解决方案。我更喜欢能够像在Unix中那样从Vim编译和运行任何C或C ++文件:
:nnorebind <F5> :! g++ %<CR>
我不想添加 vcvarsall.bat 永久添加到环境中的路径堆。我不知道如何更好地表达我的问题:如何设置Vim以便能够使用Visual Studio 2010 C ++编译器?
答案 0 :(得分:3)
您可以在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
。但是你可以随时包含这些变化。
答案 1 :(得分:1)
扩展DavidRodrí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 ...而Windows上的nmake <target>
与Unix上的make <target>
处理方式差不多。
答案 2 :(得分:0)
使用Visual Studio 2017社区,Mud的解决方案对我无效。路径不同。我认为DevSolar使用vcvarsall.bat的方式更可靠,因为它让VS能够处理正确的路径。
由于我不想使用我的vim配置随身携带.bat文件,我一直在寻找一种仅在.vimrc中工作的解决方案:
c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
。将以下内容放在.vimrc中,按F8编译当前文件
nnoremap <F8> :!vcvarsall.bat && cl /EHsc % <CR>