分页: 1 / 1

[分享]个人编写的用于编写makefile的插件

发表于 : 2008-11-25 20:26
sarrow
[分享]个人编写的用于编写makefile的插件

======================================================================

首先要感谢ubuntu中文论坛为大家提供了这样一个可以让各位同好共同分享经验、互相学习
的地方,也要感谢emacs、vim子论坛的各个热心朋友!

现在我想我用自己编写的make.vim插件来回馈大家的帮助,谢谢!

本插件主要用来编写makefile文件,安装的时候,解压到vimfiles文件夹中即可。

使用说明如下:

======================================================================

* 本make.vim插件使用说明

author:sarrow

date:2008十一月25

tag:Mingw,Make,Makefile,tool chain,compile,vim

======================================================================

** 作者说明

(本插件不遵循什么什么协议,属于copyleft产品,可以随便使用;不过造成的任何损失,
本作者概不负责。使用copy-paste大法把部分代码用在自己的脚本中的行为也是允许的,更
欢迎广泛传播使用;不过作为整体传播的话,请各位给本作者sarrow留一点署名权。)

----------------------------------------------------------------------

** 使用说明

为方便makefile的编写,提供了模板载入、内建函数补全、链接库补全、第三方库目录补全
,MingW工具链参数补全(需改进)、模板关键字补全(替换),快捷键编译。

*** 模板载入

模板载入提供了两种用户接口

1) 菜单项
2) 命令行

菜单项见&Make>&Load Template

本作者提供了4款makefile模板,对应的快捷键就是一个<LocalLeader>外加弹出菜单对应项
的前面最多4个字符。

<LocalLeader>是vim提供的一种自定义快捷键方式。它是一串表示一个按键的字符串。vim
中,该键的默认值为“\”,本插件作者把它定为“;”,相对更好按一些。

模板载入的时候,vim会检查当前的makefile文档是否为空,为空则直接写入;非空则用一
个对话框询问;

*** 内建函数补全

当使用者插入字符“$(”后,再按<C-X><C-O>将激活本补全功能;本功能基于vim提供的
Omni补全函数。

如上,将弹出:

$(abspath ~<names...>~)
$(addprefix ~<prefix>~,~<names...>~)
$(addsuffix ~<suffix>~,~<names...>~)
$(and ~<condition1[,condition2[,condition3...]]>~)
$(basename ~<names...>~)
...

这样的列表;

注意:本补全是增量式的,即若使用者知道函数名的前面几个字符,补全窗口将弹出更少的
选项以加快选择。

为方便修改参数,还提供选区转换的功能。当利用Omni选定合适的函数后,再按<C-j>(不
要推出vim的插入模式),将依次高亮选中~<和>~之间的文字;按字符键、符号键将删除选
区内文字,并插入该字符;再按<C-j>后,将跳转到下一个选区。

*** 链接库补全

功能的启动和使用方式类上,只是前缀的字符是“-l”而非“$(”;同样支持增量式补全;

*** 第三方库目录补全

类上,前缀字符为“-I”——由于库目录形式的多样性(主要是因为可能包含符号字符),
本补全不再允许增量式补全。

不过,由于第三方库不可能太多(比如上百Orz),因此这不算缺陷。

*** MingW工具链参数补全(需改进)

当光标之前为空格;或者载缀一个减号;甚至再缀上几个字母符号,再使用<C-X><C-O>,将
启动本补全。

本补全将检查行首非空字符代表的是那一个MingW工具链中的工具,并查找内建的数据,看
有没有复合当前补全类型的参数。

缺陷:

1)支持的工具有限,仅支持windres,gcc,g++,ar这四款工具。

(欢迎同好提供参数列表,先谢过了)

2)对已经用$()的方式转换了一次的工具名,无能为力。使用了续行符的情况也是

(欢迎提供修改建议)

*** 模板关键字补全(替换)

本补全功能是实现模板载入的副产品;为了方便模板的自定义编写,提高适用性,特提供了
一些关键字,以供载入的时候进行替换。

在手动编写的时候,这些关键字同样有用。

如插入C时,在后面<C-j>,将把刚才输入的C替换为当前目录内的C文件列表。

具体支持哪些关键字,见后面的列表。

*** 快捷键编译

=======================+===============================================
快捷键 | 对当前makefile文件执行的命令
-----------------------+-----------------------------------------------
<LocalLeader>ma | make -f % all 命令行参数
<LocalLeader>mr | make -f % release 命令行参数
<LocalLeader>md | make -f % debug 命令行参数
<LocalLeader>mc | make -f % clean 命令行参数
<LocalLeader>mp | make -f % depends 命令行参数
<LocalLeader>mg | 设置当前makefile所需的命令行参数
=======================+===============================================

说明,上表中的“%”表示当前makefile文件名

======================================================================

** 本插件文件列表以及说明

ftplugin
│ make.vim => 主体脚本文件
│ make.vim.readme => 本说明文档

└─make_res => 资源文件夹
3rd_part_library_dir.lst=> 第三方库目录入口;用于-I模式补全
functions.mak => make函数列表文件;用于Omni补全
make.console.mak => 当前及以下3个文件是本作者提供的
make.dynamic_lib.mak 4款makefile模板文件;分别提供
make.static.lib.mak 控制台、动态链接库、静态打包以及
make.win.mak win32qui程序的编译
mingw.lib.lst => 第三方库文件;用于-l模式补全

*** 3rd_part_library_dir.lst

其中3rd_part_library_dir.lst内有较详细的注释说明,要添加自己的库目录,请阅读之。

*** functions.mak

functions.mak中也用了注释进行说明;要修改选区标记符号、或者要添加自定义的宏函数,可
以根据说明自行修改。

*** template中模板关键字列表以及说明:

4款模板文件中使用了一些类似软景网页制造机的关键字,以便在载入模板的时候进行替换。这些
不好写在注释中,因此添加、修改模板的说明,就在这里单独提出来。

===============+============================
关键字名 |说明
---------------+----------------------------
$C$ |c源文件列表
$CPP$ |c++源文件列表
$RES$ |res资源文件列表
$SRC$ |所有的源文件
$H$ |c头文件列表
$HPP$ |c++头文件列表
$HH$ |C/C++头文件列表
$ALL$ |所有的文件列表
$DATE$ |当前时间
$DIRNAME$ |父文件夹名字
$FNAME$ |当前makefile文件全名
$FNAME_NO_EXT$ |makefile文件的无后缀名
$FNAME_EXT$ |makefile文件后缀
$CWP$ |当前工作目录
===============+=============================

注意:模板文件中的关键字前后添加了dollar符;手动编写makefile文件的时候,要使用这
些替换功能,就不用添加这个符号,直接C<C-J>,DATE<C-J>就OK了。

======================================================================

** 几点问题

*** 如何本插件的资源文件,以达到自定义化?

本插件在编写的时候尽量考虑到用户的使用习惯上可能的不同,因此很多参数快捷键都可以
自行修改,需要对补全弹出的条目的内容进行修改、添加也很方便。

具体操作见前面 《本插件文件列表以及说明》,并仔细阅读附带的资源文件中的说明。

*** 如何添加用户自己编写的makefile模板?

模板文件的添加、修改、重命名同样比较自由。当添加新模板的时候,只需要让模板文件创
建在make_res文件夹下面,名字符合下面的格式:

mingw.*.mak

即可,本make.vim脚本会自行添加(需要重启vim);

*** 快捷键与makefile模板文件的关系?

当编辑makefile文件的时候,可以使用快捷键进行载入模板文件,自定义的模板也如此。快
捷键的规则为:

<LocalLeader>所需载入的模板文件名第一、二个小数点之间部分的前面至多4个字符

呵呵,说得这么麻烦,不知道看得懂不?

其实很简单。以下面几个由作者提供的模板为例:

make.dynamic_lib.mak <LocalLeader>dyna
make.static.lib.mak <LocalLeader>stat
make.win.mak <LocalLeader>win

<LocalLeader>是某键位的占位符,vim系统默认是“/”键,本作者把它修改为了“;”,即
在正常的命令模式下,依次按

;dyna

着5个键,将载入模板文件

make.dynamic_lib.mak

并自动替换其中使用的模板关键字。

同理,按“;win”,将载入make.win.mak
======================================================================

如有疑问及建议、以及错误列表,请在本帖后面回复,谢谢。有暇即阅。

Re: [分享]个人编写的用于编写makefile的插件

发表于 : 2008-11-25 20:30
sarrow
呵呵,本来在vim中还好好的格式,贴到论坛就走样啰!

Re: [分享]个人编写的用于编写makefile的插件

发表于 : 2008-11-27 9:34
macrohard
感谢楼主