编译windows运行环境下的vim
整理下在windows环境中编译vim的主要步骤:
- 编译gvim.exe(32/64 bits)
- 编译libiconv.dll(32/64 bits)
- 编译cscope.exe(32 bits)
- 编译diff.exe(32 bits)
- 编译ctags.exe(32 bits)
这里提供下本人编译的gvim的下载链接,包括
32位gvim74.zip
和64位gvim74_x64.zip,绿色版,
欢迎下载(别忘了替换自己的_vimrc和vimfiles)
如果有兴趣可以动手照下面步骤稍微修改make参数打开更多的特性
所需编译工具:
mingw64
因为mingw32无法生成64位的exe,所以选择使用mingw64, mingw64命令行在windows环境下最好运行在cgywin的终端环境中,这样看似互相冲突的两种linux on windows方案在编译这件事上就很完美的结合在一起
msvc(visual studio)(可选)
出于windows下的开发习惯可以使用visual studio自带的c/c++编译器生成gvim.exe,当然使用mingw64(gcc)已经可以做到,但也许使用微软的编译器生成代码显得更正统一些?
安装配置编译环境
- msvc: 微软C/C++编译器
获取C++编译器需要安装visual studio 2010|2012,不能使用Express版因为Express版本(2013以前)不包含生成64bits的代码工具, 但发现新发布的visual studio 2013 express中包含生成64位程序的编译器,下面步骤测试使用了2013 express证实可行
使用visual studio工具在命令行下编译c/c++程序的要点就是要配置以下三个环境变量
path
:使得命令行能够找到cl.exe,mspdb*.dll,link.exe,nmake.exe,rc.exe编译链接资源构建工具等等include
:指定标准c库和平台sdk头文件路径lib
:指定和include对应的各种链接库路径
- mingw64: GCC
mingw64工具链在cgywin的软件仓库中有发布
cygwin的安装非常方便,运行setup程序后,
搜索安装 make , binutil , openssh
安装编译工具链搜索mingw64并选中安装:
mingw64-i686-gcc-core , mingw64-i686-gcc-g++ , mingw64-x86_64-gcc-core, mingw64-x86_64-gcc-g++
(这里推荐网易开源镜像,速度很快)
首次安装完成后启动cygwin.bat(管理员权限)并使用ssh-host-config命令配置sshd服务后即可以使用securecrt 登录ssh本机127.0.0.1的cygwin环境
开始编译:
=>gvim
代码在http://www.vim.org/download.php ,下载完整版: vim-7.4.tar.bz2
生成32 bits:
使用mingw64(gcc):
cd src
make -f Make_ming.mak GUI=yes OLE=no MBYTE=yes ARCH=i686 USERNAME=fooy USERDOMAIN= CROSS_COMPILE=i686-w64-mingw32-
GUI=yes
: 编译图形窗口,如果指定为GUI=no,则生成dos版本USERNAME=
和USERDOMAIN=
: 当在vim中敲入:ver
,这两个参数会显示在"Compiled by:“之后
或者在cmd环境中使用msvc生成(可选):
需要先配置include
和lib
环境变量
C:\Users\fy>echo %include%
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include;
C:\Users\fy>echo %lib%
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib;
在path
变量中加入路径:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin;
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin;
nmake -f Make_mvc.mak GUI=yes OLE=no MBYTE=yes USERNAME=fooy USERDOMAIN= MSVCVER=12.0
mingw64(gcc):
make -f Make_ming.mak GUI=yes OLE=no MBYTE=yes ARCH=x86-64 USERNAME=fooy USERDOMAIN= CROSS_COMPILE=x86_64-w64-mingw32-
msvc:
64位的代码工具和库所在目录名一般包含’amd64’或’x64’,这个需要检查调整,不同版本的visual studio安装略有差异
将lib
调整为64位代码库路径,include
保持不变
C:\Users\fy>echo %lib%
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib\amd64;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64;
path
也需要调整为优先定位64位的编译程序,加入路径:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64;
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin;
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\x64;
编译:
nmake -f Make_mvc.mak GUI=yes OLE=no MBYTE=yes CPU=AMD64 MSVCVER=12.0 USERNAME=fooy USERDOMAIN=
以上每次编译生成的文件,只需要gvim.exe vimrun.exe xxd.exe这三个文件
同时需要拷贝出代码目录下的runtime目录,这是vim的运行时目录(:h $VIMRUNTIME
)
=>libiconv:
windows环境下缺失libiconv.dll最直接现象是vim无法正常打开Unicode(utf-16)
和Unicode big edian(utf-16le)
类型的文件
这里编译的32bits和64bits要和以上的vim对应放在同一目录(参加:h iconv-dyn
)
32 bits:
./configure --host=i686-w64-mingw32 && make
./configure --host=x86_64-w64-mingw32 && make
cp lib/.libs/libiconv-2.dll libiconv.dll
=>编译cscope
vim中编辑代码的必需套件就是cscope,移植windows下的cscope不幸有点小麻烦,需要先编译正则表达式库pcre和终端库pdcurse
pcre:
代码:http://sourceforge.net/projects/pcre/files/pcre/
./configure --host=i686-w64-mingw32 --disable-cpp && make
.libs/{libpcre.a,libpcreposix.a}
pdcurse:
代码:http://sourceforge.net/projects/pdcurses/files/
cd pdcurs32/win32/
make -f gccwin32.mak CC=i686-w64-mingw32-gcc LINK=i686-w64-mingw32-gcc
win32/pdcurses.a
cscope:
需要在cygwin中查找并安装 flex 和 bison
cscope的代码需要一些小的修改才可以顺利编译,这里参考了JesseFang,
主要是去掉一些不存在的函数和修正小的bug
我是基于cscope-15.8a基础上修改的,代码在这里下载
解压后执行configure配置编译环境,需要指定pcre和pdcurse的头文件路径
PCRE_DIR="${PWD}/../pcre-8.32/"
PDCURSE_DIR="${PWD}/../pdcurs34/"
./configure --host=i686-w64-mingw32 CFLAGS="-DPCRE_STATIC -I${PWD} -I${PCRE_DIR} -I${PDCURSE_DIR}"
cat >>config.h <<!
#define __DJGPP__
#define __MSDOS__
!
最后编译并静态链接前两步生成的库文件生成cscope.exe
make LDFLAGS="-L${PCRE_DIR}/.libs/" LIBS="-static -lpcreposix -lpcre ${PDCURSE_DIR}/win32/pdcurses.a /cygdrive/c/Windows/System32/kernel32.dll"
=>diff.exe
下载diffutils 3.3: http://ftp.gnu.org/gnu/diffutils/
应用这个patch
cd diffutils-3.3
patch -p1 <../diffutils-3.3.mingw.patch
./configure --host=i686-w64-mingw32 && make
=>ctags.exe
下载5.8: http://ctags.sourceforge.net/
文件ctags58.zip
目录结构
以上编译生成的文件放在同一目录下:
|~gvim74/
| |+runtime/ -- 从vim源代码目录拷贝过来
| |+vimfiles/ -- 平时收集的vim扩展都放在这个目录下
| |-_vimrc
| |-cscope.exe
| |-ctags.exe
| |-diff.exe
| |-gvim.exe
| |-libiconv.dll
| |-regvim.bat -- 注册edit with Vim
| |-vimrun.exe
| |-xxd.exe
打开gvim ,执行:helptags $VIM/vimfiles/doc
更新下所有的插件的帮助文档tag
最后把这个目录打包,这样自己的vim绿色版就算制作完工
对了这里regvim.bat这个批处理可以把vim注册到右键菜单’edit with Vim’和’文件属性->打开方式’
@echo off
set FDIR=%~dp0
set GVIM_PATH=%FDIR%gvim.exe
IF NOT EXIST "%GVIM_PATH%" goto NOTFOUND
@echo on
@echo "@> add to right mouse file menu"
reg add "HKCR\*\shell\edit with Vim" /f
reg add "HKCR\*\shell\edit with Vim" /d "edit with &Vim" /f
reg add "HKCR\*\shell\edit with Vim\command" /d "\"%GVIM_PATH%\" --remote-tab-silent \"%%1\"" /f
@echo "@> add to file property - open with"
reg add "HKCR\Applications\gvim.exe\shell\open\command" /d "\"%GVIM_PATH%\" --remote-tab-silent \"%%1\"" /f
@echo off
GOTO END
:NOTFOUND
@echo "pls put this file the same dir with gvim.exe"
:END
pause