vim7.4发布也有一段时候了,也该是把之前编译的7.3重新编译一下了,于是考虑着到最新的visual studio
2013编译一下,也顺便看看有没有其它问题。



1、安装vs2013,这个应该不用说了。



2、下载vim源码,ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2



3、下载vim的最新补丁。

ftp://ftp.vim.org/pub/vim/patches/
,把这个地址里面的7.4目录全部用ftp工具下载下来,然后把目录名字改成patches。



4、给源码打补丁。

把vim-7.4.tar.bz2解压,会有farsi libs nsis
src等目录,再把刚才下载的补丁的那个patches的文件夹全部放到这里面来。注意,给源码打补丁必须要用到patch这个工具,而这个工具只有在linux环境或者windows下面的cygwin里才有,自行想办法解决。

在终端里面使用命令:for file in patches/7.4.*; do patch -Np0 -i $file; done
给源码打补丁。



验证一下是否打补丁成功,打开vim源码src目录下面的version.c文件,定位到大概739行,在

static int
included_patches[]这个数组的定义里面,看下面的数字是不是已经变成了补丁序号,比如说打了61个补丁,就应该显示最大的是61。如果这里没有显示或者显示不对,那说明打的补丁有问题,重新打。

5、如果你想开启vim对其它程序语言的支持的话,请去各软件的官网下载最新的依赖库并安装。我下载了这些所需的依赖包(注意,下载perl的时候不要下载strawberry
perl,实测使用它无法编译下去,而使用active perl则没有问题):

ActivePerl-5.16.3.1603-MSWin32-x64-296746.msi

ActivePerl-5.16.3.1603-MSWin32-x86-296746.msi

ActiveTcl8.6.1.0.297577-win32-ix86-threaded.exe

ActiveTcl8.6.1.0.297577-win32-x86_64-threaded.exe

LuaForWindows_v5.1.4-46.exe

python-2.7.5.amd64.msi

python-2.7.5.msi

python-3.3.2.amd64.msi

python-3.3.2.msi

ruby-1.9.1-p0-i386-mswin32.zip

下载完之后,安装它们,注意最好安装到一个目录下面以方便后面的操作,比如D:\vim_compile_tool。



6、修改源代码,实现vim启动界面 修改者 xxx abc@cde.com的功能。

在源码的src目录下面,修改vim.h这个文件。

在#include "vim.h" 的下一行加上这一行:

#define MODIFIED_BY "zhufeng chen "



7、修改适合vs2013编译器的makefile文件Make_mvc.mak。

这个文件在源码的src目录下面,打开它。

在# Derive version of VC being used from nmake if not specified
这个区域下面,加入最新的vs2013的vc编译器的定义,否则makefile会拒绝编译,因为版本不匹配。

大约是424行,这个地方:

!if "$(_NMAKE_VER)" == "11.00.60610.1"

MSVCVER = 11.0

!endif

在上面这一段下面加上如下的这一段:

!if "$(_NMAKE_VER)" == "12.00.21005.1"

MSVCVER = 11.0

!endif

加上的这一段是为了加入vs2013的vc编译器版本定义的支持。



611行,把SUBSYSTEM = windows改成 SUBSYSTEM = windows,5.01

639行,把SUBSYSTEM = console改成 SUBSYSTEM = console,5.01

改这两行是为了让vs2013的编译器编译出来的exe支持在win2000
sp1及以上的版本系统运行,不改的话,生成的exe只支持在vista及以上的系统运行,具体见我的上一篇日志。



8、修改ruby部分的源码,否则无法编译ruby支持。

把这个文件D:\vim_compile_tool\ruby\include\ruby-1.9.1\i386-mswin32\ruby\config.h

前三行

      
#if _MSC_VER != 1200

      
#error MSC version unmatch: _MSC_VER: 1200 is expected.

      
#endif

全部注释掉。



9、
因为mzscheme现在已经变成racket,它已经不再支持动态加载,而静态加载的话,+mzscheme会造成生成的gvim.exe文件大很多而且必须要加入版本号完全一样的dll才能运行gvim.exe,所以放弃这个选项。

10、修改vim源码生成的exe的图标,具体文件是源码src目录下面的vim.ico这个文件。

因为源码自带的vim.ico分辨率太低,所以可以自己去生成一个分辨率更高的ico文件,或者改成别的ico也行,我就自己制作了一个vim原版的分辨率的ico文件和一个macvim的高分辨率的ico图标,分别用这两个ico编译出了两个gvim.exe。

11、开始准备编译32位、64位原生gvim.exe以及32位命令行版vim.exe。



12、修改src目录下面的bigvim.bat,以下是我使用的例子。



:: command to build big Vim with OLE, Perl, Python, Ruby and
Tcl

SET TOOLDIR=D:\vim_compile_tool\

nmake -f Make_mvc.mak SDK_INCLUDE_DIR="H:\Program Files
(x86)\Microsoft SDKs\Windows\v7.1A\Include" FEATURES=HUGE GUI=yes
OLE=yes CPUNR=pentium4 IME=yes GIME=yes CSCOPE=yes SNIFF=yes
POSTSCRIPT=yes PERL=%TOOLDIR%perl32 DYNAMIC_PERL=yes PERL_VER=516
PYTHON=%TOOLDIR%Python27_32 DYNAMIC_PYTHON=yes PYTHON_VER=27
PYTHON3=%TOOLDIR%Python33_32 DYNAMIC_PYTHON3=yes PYTHON3_VER=33
RUBY=%TOOLDIR%ruby DYNAMIC_RUBY=yes RUBY_VER=19 RUBY_VER_LONG=1.9.1
TCL=%TOOLDIR%tcl32 TCL_VER=86 TCL_VER_LONG=8.6 DYNAMIC_TCL=yes
LUA=%TOOLDIR%lua5.1 DYNAMIC_LUA=yes %1 USERNAME=zhufeng
USERDOMAIN=zhufeng_m-PC



对这个文件简单解释一下。

TOOLDIR就是上面安装的那些依赖包的路径,注意,因为这个绝对路径的最后已经有了斜杠,所以在引用这个变量的时候,比如D:\vim_compile_tool\perl32这个路径,就应该是%TOOLDIR%perl32,不要再加一个斜杠。

SDK_INCLUDE_DIR这个是win32.mak这个文件的路径,我给了一个参考,这个是随着vs2013一起安装上的。

最后的USERNAME和USERDOMAIN可以自定义的。



13、现在打开开始菜单或者开始屏幕里面的vs2013下面的Visual Studio Tool,里面会有VS2013 x64
本机工具命令提示,VS2013 x86
本机工具命令提示等几个快捷方式,这个就是设置vc编译器环境变量的快捷方式了,我们就要使用这其中的x86本机和x64本机来编译出原生的32以及64位的gvim.exe和vim.exe。

14、先编译32位的gvim.exe。

打开 VS2013 x86 本机工具命令提示,
会进入cmd窗口,在这个窗口里面cd到vim源码的src目录,然后输入bigvim.bat回车。如果是按照上面的所有步骤来做的话,这时候就应该开始编译源码了,会一直在滚动,大概过了三四分钟的样子,随着“正在生成代码”的提示过后,滚烫烫的gvim.exe就应该已经编译好了,位于源码src目录里面。现在执行vim.exe,输入:ve,看支持的特性是不是和上面的bigvim.bat是对应的,如果是正常对应的话,就可以把这个gvim.exe复制出来准备使用了。

15、再编译32位的vim.exe。

先清理一下src目录,把这个目录下面生成的一个以obj开头的文件夹删掉,再按文件的修改日期排序,把后面编译生成的一些其它文件全部删掉,再开始准备编译不带图形的cmd版vim.exe。

只需要把bigvim.bat里面改一个地方,就是把GUI=yes改成GUI=no,再执行bigvim.bat,没有问题的话就会生成vim.exe。现在可以关闭这个cmd窗口了。

16、最后编译64位的gvim.exe。

按照15步的方法清理一下源码目录,再把bigvim.bat改回去,GUI=yes。

这里的bigvim.bat还需要修改,因为现在是编译64位的版本,所以依赖库的目录也要相应改成64位版本,把bigvim.bat里面的依赖库的路径要修改一下。

打开13步里面的 VS2013 x64
本机工具命令提示,继续执行bigvim.bat,生成gvim.exe之后运行它,使用:ve看,如果第二行是

MS-Windows 64-bit GUI version with OLE 
就说明成功了。









最后附上我自编译的gvim
7.4,有32位及64位版本,有原版图标和macvim两个128*128高分辨率图标,自带了自用的vimrc。有问题请Email至
Iwantcomputer@gmail.com交流。



http://pan.baidu.com/share/link?shareid=4257608227&uk=3943040330

vim7.4官方源码在vs2013的编译方法及问题总结的更多相关文章

  1. 在Activiti官方源码上提交的两个bugfix

    前段时间在Activiti官方源码上提交了两个bugfix,截图为证. 第1个是BPMN model输出的bug:

  2. EDKII Build Process:EDKII项目源码的配置、编译流程[三]

    <EDKII Build Process:EDKII项目源码的配置.编译流程[3]>博文目录: 3. EDKII Build Process(EDKII项目源码的配置.编译流程) -> ...

  3. Android源码的下载、编译与导入到Android Studio【转】

    本文转载自:http://wl9739.github.io/2016/05/09/Android%E6%BA%90%E7%A0%81%E7%9A%84%E4%B8%8B%E8%BD%BD%E3%80% ...

  4. 痞子衡嵌入式:MCUXpresso IDE下将源码制作成Lib库方法及其与IAR,MDK差异

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下将源码制作成Lib库方法及其与IAR,MDK差异. 程序函数库是一个包含已经编译好代码和数据的函数集合,这 ...

  5. jQuery 2.0.3 源码分析Sizzle引擎 - 编译函数(大篇幅)

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 从Sizzle1.8开始,这是Sizzle的分界线了,引入了编译函数机制 网上基本没有资料细说这个东东的,sizzle引入这 ...

  6. Atitit.反编译apk android源码以及防止反编译apk

    Atitit.反编译apk android源码以及防止反编译apk 1.1. Tool  apk逆向助手1 1.2. 二.使用dex2jar + jd-gui 得到apk的java源码1 1.3. 用 ...

  7. 【转】Android 源码下利用jni编译自己的项目(参考系统development/samples/SimpleJNI)

    原文网址:http://blog.csdn.net/qiuxiaolong007/article/details/7860481 记于正文前:环境是ubuntu10.10,android 源码是2.0 ...

  8. Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装

    原文:Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装 Linux内核分析(一) 从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底 ...

  9. Ubuntu TensorFlow 源码 Android Demo的编译运行

    Ubuntu TensorFlow 源码 Android Demo的编译运行 一. 安装 Android 的SDK和NDK SDK 配置 A:下载 国内下载地址选最新的: SDK: https://d ...

随机推荐

  1. 从头认识java-17.2 线程中断(interrupt)

    这一章节我们来讨论一下线程中断(interrupt). 1.什么是线程中断(interrupt)? 就是在多线程执行的时候,我们给线程贴上一个中断的标记.可是不要求线程终止. 2.样例: 中断的样例: ...

  2. 《Effective Modern C++》翻译--条款4:了解怎样查看推导出的类型

    条款4:了解怎样查看推导出的类型 那些想要了解编译器怎样推导出的类型的人通常分为两个阵营. 第一种阵营是实用主义者.他们的动力通常来自于编敲代码过程中(比如他们还在调试解决中),他们利用编译器进行寻找 ...

  3. 33.AngularJS 应用 angular.module定义应用 angular.controller控制应用

    转自:https://www.cnblogs.com/best/tag/Angular/ AngularJS 模块(Module) 定义了 AngularJS 应用. AngularJS 控制器(Co ...

  4. Conditionals

    1. Modulus operator (%) The modulus operator works on integers and yields the remainder when the fir ...

  5. Scala和范畴论 -- 对Monad的一点认识

    Scala和范畴论 -- 对Monad的一点认识 背景 所有一切的开始都是因为这句话:一个单子(Monad)说白了不过就是自函子范畴上的一个幺半群而已,有什么难以理解的.第一次看到这句话是在这篇文章: ...

  6. 每位 Ubuntu 18.04 用户都应该知道的快捷键

    作者: Abhishek Prakash 译者: LCTT XiatianSummer 了解快捷键能够提升您的生产力.这里有一些实用的 Ubuntu 快捷键助您像专业人士一样使用 Ubuntu. 您可 ...

  7. 深入理解 sudo 与 su 之间的区别

    深入理解 sudo 与 su 之间的区别 作者: Himanshu Arora 译者: LCTT zhb127 在早前的一篇文章中,我们深入讨论了 sudo 命令的相关内容.同时,在该文章的末尾有提到 ...

  8. opencv——图像的灰度处理(线性变换/拉伸/直方图/均衡化)

    实验内容及实验原理: 1.灰度的线性变换 灰度的线性变换就是将图像中所有的点的灰度按照线性灰度变换函数进行变换.该线性灰度变换函数是一个一维线性函数:f(x)=a*x+b 其中参数a为线性函数的斜率, ...

  9. WebService通讯技术的CXF框架问题

    WebService通讯技术的CXF框架问题 严重: Servlet /cxf_rs_spring threw load() exception java.lang.ClassCastExceptio ...

  10. sql查询 按照规定的顺序返回结果集。

    DECODE函数 oracle 独有,功能强大.相当于 if else if IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ..... ...