闲来无聊自己编译个emacs玩玩。
使用gcc 4.5.0 (MinGW), win32-api 3.15
简单地上GNU网站 http://www.gnu.org/software/emacs/#Obtaining 去下载源代码。
在此之前,需要下载许多图形库来创建emacs在窗口模式下需要的图标。
网上有比较多的例子,在sourceforge http://sourceforge.net/projects/gnuwin32/files/ 可以下载到所有需要的图形库
在现在2011-1-13,当前可以下载到的是:
1. jpeg
2. png
3. tiff
4. gif
5. xpm
6. zlib
-------------另有一点忘了说了,xpm是需要源代码包的,那个src-exe 或者zip,安装之后把src/xpm/3.5.1/libXpm-3.5.1-src/lib下的xmp.h和simx.h一起复制到MinGW/include/X11下,否则即使装了xpm也会找不到的。
-------------make bootstrap的过程在一开始有一段有点像抽风。。。不过要耐心等。。。
由于都是.exe安装包,直接把路径都选在X:/MinGW (X是盘符,或者换成自定义的路径,但必须跟MinGW原来的文件放在一起)
然后进入emacs-23.2的nt文件夹,在cmd下运行
configure.bat --with-gcc --no-debug --no-cygwin
如果缺少图形库,会在configure的末尾提示失败,根据指示操作就行了。
然后是运行make
make bootstrap
如果没有修改mingw32-make的文件名的,就把make改成mingw32-make
就是在make的地方出现了一个问题:
win32.c里_PROCESS_MEMORY_COUNTERS_EX与psapi.h 的同一个struct 重定义
具体的error我没记下来,但总之是emacs文件夹下的w32.o中_PROCESS_MEMORY_COUNTERS_EX与MinGW/include文件夹下的psapi.h中重定义了,上网一问,原来是w32-3.15中新增加的这个结构体,可能是emacs23-2没有考虑到新版本的w32api这个改变,所以人为声明了。
解决方法是找到MinGW/include下的psapi.h,定位到
typedef struct _PROCESS_MEMORY_COUNTERS_EX {
DWORD cb;
DWORD PageFaultCount;
DWORD PeakWorkingSetSize;
DWORD WorkingSetSize;
DWORD QuotaPeakPagedPoolUsage;
DWORD QuotaPagedPoolUsage;
DWORD QuotaPeakNonPagedPoolUsage;
DWORD QuotaNonPagedPoolUsage;
DWORD PagefileUsage;
DWORD PeakPagefileUsage;
DWORD PrivateUsage;
} PROCESS_MEMORY_COUNTERS_EX,*PPROCESS_MEMORY_COUNTERS_EX;