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

6
我正在尝试设置Vim以使用VS(express)C编译器cl.exe。 添加
set makrprg='c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cl.exe'

我已经尝试使用 \\\\\\\\\ 进行转义,以确保将以下内容添加到我的 _vimrc 文件,并调用 :make %,结果如下:

:! myfile.c >C:\Users\gvkv\AppData\Local\Temp\VIe7BF5.tmp 2>&1

myfile.c加载到VS的IDE中!即使cl.exe需要其环境:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat

这仍然很奇怪,我不知道该如何继续。


不要转义反斜杠,尝试将斜杠翻转到另一个方向(Windows 可以处理此操作)。此外,大多数 Make 程序都有调试选项;这些选项可以帮助您追踪问题。 - jdigital
3个回答

6
Judge Maygarden的解决方案在正确转义的前提下是正确的,解决了我遇到的Vim问题,但我还需要解决其他一些问题才能使事情正常工作。尤其是:
  1. cl.exe不仅需要正确的路径,还需要正确的环境变量;即添加 C:\my\path\to\cl 是不够的。否则你会得到缺少 DLL 的错误提示。解决方案是将 vcvars32.bat(或任何其他设置类似环境的批处理文件)和 cl 作为一个单独的命令运行。

  2. cmd 要求任何带有空格的路径都必须用双引号括起来,但你不能用 \ 转义它们,因为 :! ... 会将 \ 理解为字面意思;相反,你必须用双引号来引用双引号,如 ""...

所以,为了完整起见,我想发布我的实际解决方案。在 Vim(或 _vimrc)中:

:set makeprg=\"\"Program\ Files\ (x86)\\Microsoft\ Visual\ Studio\ 10.0\\VC\\bin\\vcvars32.bat\"\&\&cl\"

然后你可以简单地调用

:make %

完成了。

这种方法可以轻松地推广到任何编译器。 此外,正如devemouse的答案建议的那样,为nmake创建一个makefile可能是处理任何规模较大的项目的最佳方法(我想要一个仅适用于Vim的解决方案来满足我的当前工作需求)。


3
我创建了一个 makefile,其中有这样的目标:
VCPROJ = /path/to/MyProject.vcproj

all:
    "c:\Program Files\Microsoft Visual Studio 9.0\VC\vcpackages\vcbuild.exe" /nocolor /r $(VCPROJ) Debug

.PHONY: all

我在vim的路径中添加了make,因此不需要修改makeprg

这样VS就可以正常编译整个项目,而vim会解析错误信息。


3

我认为您的makeprg语句问题主要是由路径中的空格引起的。 Cmd.exe需要在空格周围使用双引号。首先,在路径周围使用转义的双引号(\“)。接下来转义所有反斜杠(\)。最后转义所有空格(\ )。

set makrprg=\"c:\\Program\ Files\ (x86)\\Microsoft\ Visual\ Studio\ 10.0\\VC\\bin\\cl.exe\"

另外,您可以适当设置您的路径,并直接将makeprg设置为cl.exe


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接