LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2721|回复: 12

怎么配置vim,:make调用外部编译器

[复制链接]
发表于 2010-12-15 21:36:36 | 显示全部楼层 |阅读模式
我是做嵌入式设计的,有些工具不得不使用windows开发环境(像某些单片机的编译器只有windows版本的),但是同时我希望能使用vim强大的编辑功能。因此我在机器上安装了windows版本的vim。
对嵌入式程序编译的时候有专门的编译器,可以在命令行中执行,例如:C51.exe myprogram.c,可以直接在cmd窗口下输出编译结果以及出错信息(其实集成的ide环境也是这么做的,只不过他们把这些都封装好了)。我想能不能在vim中直接:make,进行编译,并且把编译的结果在quickfix窗口输出,这需要做什么设置?
可能这个问题不是什么问题,只因为我是一个vim的新手,对编译的过程了解不是很多。先谢谢各位了
发表于 2010-12-15 21:57:04 | 显示全部楼层
:h makeprg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-12-15 22:00:56 | 显示全部楼层
对了,是不是需要写makefile文件?
如果要写的话,为什么在cmd方式下命令行编译的时候,不用写makefile呢?
回复 支持 反对

使用道具 举报

发表于 2010-12-15 22:05:05 | 显示全部楼层
理论上,编译都是用命令编译
但是要编译一大堆文件,又懒得输入一大堆编译命令,就用makefile来写规则来自动执行这一堆编译命令
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-12-15 23:34:35 | 显示全部楼层
我在_vimrc中加入:set makeprg=c51.exe\ %,用vim打开test2.c,:make一下,显示:

:!c51.exe test2.c  >d:\temp\VIe55.tmp 2>1
(1 / 5):
请按ENTER或其他命令继续

检查test2.c的目录,发现多了test2.LST和test.OBJ文件。
如果我在cmd下运行"C51.exe test2.c"会显示:
C51 COMPILER V9.01 - SN: K1NMC-I5MMLC
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2009
C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

同样会在该目录生成test2.lst和test2.obj,说明在vim下的make确实编译了C文件,并且生成了目标文件,但是它的输出到那里去了呢?怎样才能在quickfix窗口输出呢。
我现在对vim的调用原理还不是太清楚,所以问的问题可能有些简单。请大侠解释一下,给我指一个方向也可以,让我去看什么。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-12-15 23:49:38 | 显示全部楼层
哦,知道了,用:cope就可以查看到输出,但是
-----------------------------------------------------------
:!c51.exe test2.c >d:\temp\VIe55.tmp 2>1
(1 / 5):
请按ENTER或其他命令继续
-----------------------------------------------------------
输出这样的信息是干什么用的呢,我不想显示这样的信息,也不想烦琐的按ENTER或其他命令,而是要make完之后直接显示quickfix窗口,然后为下一步能够定位出错的行做准备。
回复 支持 反对

使用道具 举报

发表于 2010-12-16 01:02:57 | 显示全部楼层
vim设定问题,你编译没有错误就不用打开quickfix,手动打开的话就:copen

记住,vim始终是编辑器,是没办法做成跟ide一样的,例如调试根本不能跟ide想提并论
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-12-16 01:40:53 | 显示全部楼层
说的是,可是我不打开quickfix怎么知道编译成功呢?
其实根本的目的就是加快程序编写和修改的速度,我也没有按windows中IDE的标准配置VIM的想法。调试我是不打算在vim里面实现了,这需要嵌入式的在线调试支持,为windows编写的调试仿真软件很难跟vim配合。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-12-16 09:34:59 | 显示全部楼层
那到底是什么样的vim设定问题,要不要写makefile文件,网上通用的经验都基于GCC的,很少说用别的编译器的。GCC的编译出错信息可以直接被定位,别的编译器出错信息需要编写errorformat才能定位。
别人说设定makeprg后就可以直接编译,但是现在看来效果不是很好,是不是可以舍去makeprg,写makefile实现一系列的动作?
回复 支持 反对

使用道具 举报

发表于 2010-12-16 11:43:52 | 显示全部楼层
Post by knifeflying;2123166
那到底是什么样的vim设定问题,要不要写makefile文件,网上通用的经验都基于GCC的,很少说用别的编译器的。GCC的编译出错信息可以直接被定位,别的编译器出错信息需要编写errorformat才能定位。
别人说设定makeprg后就可以直接编译,但是现在看来效果不是很好,是不是可以舍去makeprg,写makefile实现一系列的动作?


makeprg 就是用于编译的程序,写 Makefile 意味着你需要把 makeprg 设定为 make 而已。与别的没有太大不同。通常我都会用 Makefile,因为用它的好处是你不必停留在当前的文件中进行编译。例如,当前你允许正在编辑一个 .h 文件,如果不用 Makefile 的话,vim 是不知道该去编译谁的。而用 Makefile 的话,只要在当前目录就都可以正常编译。

究其原因是你没有理解 vim 的工作原理,如果你希望 make 之后自动打开 quickfix,设定一个触发器就可以了,很多人并不希望这一点,例如我。所以缺省的设定是不自动打开。

另外,编译器的输出必须能够被 vim 识别,gcc的出错信息可以被 vim 识别,你的编译器如果输出格式跟 vim 差不多的话,也可以被识别,如果不同的话,需要自定定制一下 errorformat。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表