[內容提要] 本文主要說明怎樣獲取emacs的最新源代碼,emacs的編譯環境,在不同平臺(Ubuntu & Windows)從最新的源碼編譯與安裝emacs的過程與步驟;以及插件cedet、ecb、cscope、jde編譯安裝過程。重點講述windows下的編譯環境配置。
我們要想在開發優秀的軟件,必須要有優秀的開發工具。想必國人用windows習慣了,不用說首選必是MS visual studio,可以非常方便的開發自己的項目,但是只能在windows下使用。如果你的項目代碼是跨平臺的,vs將無武之地。Emacs是最古老的編輯器,也是世界上最強大的IDE。像OpenOffice.org這樣大型跨平臺的包括C++/C、JAVA、python、C#、甚至VBA多語言編譯的項目,正是emacs顯示其強大功能,無所不包的地方。
正所謂“工欲善其事,必先利其器”,我們如何利用和改造emacs,使之成爲我們開發的利器。本篇是打造高效的跨平臺的OpenOffice.org開發環境系列之一--Emacs 24 的編譯與安裝,講述如何從源代碼編譯安裝emacs,重點講述windows xp使用mingw編譯emacs24的環境配置和所需的附加組件,以及插件編譯安裝。
-
獲得emacs源碼
由於Emacs開發團隊把版本控制系統從CVS轉換爲Bazzar,因此,這裏我們以ubuntu和winodows xp 如何獲取gnu emacs源碼。
Ubuntu Lucid
安裝 Bazaar
下面的安裝命令爲你安裝bazaar 和相關依賴軟件。
$ sudo apt-get install bzr
從倉庫檢出代碼
$ cd ~
$ bzr branch http://bzr.savannah.gnu.org/r/emacs/trunk emacsrc
windows xp
如果你的windows系統安裝了python2.6, 從下載地址:http://launchpad.net/bzr/2.1/2.1.1/+download/bzr-2.1.1.win32-py2.6.exe 下載bazaar for python,或者包括全部依賴組件的安裝文件:http://launchpad.net/bzr/2.1/2.1.1/+download/bzr-2.1.1-setup.exe 。詳細安裝過程請參考[3.]
檢出代碼同ubuntu。
當然你希望在linux和windows 下使用同一份源代碼,關於使用相同源代碼請參考本文emacs 編譯部分的說明。
更新源碼
如果你要更新emacs到最新代碼,只需在emacs檢出代碼目錄下用以下命令即可:
bzr pull
在更新到最新版本,你可以看到emacs的版本信息,如下所示:
:/developdir/emacsrc$ bzr pull
Using saved parent location: http://bzr.savannah.gnu.org/r/emacs/trunk/
+N admin/unidata/BidiMirroring.txt
...
M test/ChangeLog
All changes applied successfully.
Now on revision 100623.
[注:]由於trunk分支在不斷更新中,有可能你下的那個revision編譯有些問題,解決辦法:一是回滾到以前某個revision,版本100434在windows 和ubuntu 下編譯通過;二是等再下一個revision。
編譯emacs之前的準備
請仔細閱讀emacsrc 目錄下的INSTALL && INSTALL.BZR 文件,一般你只需按照上面說的做就可以編譯安裝emacs了。
Ubuntu Lucid
在ubuntu編譯emacs非常簡單,用apt-get即可簡單完成emacs編譯環境的構建。
$ sudo apt-get install build-essential $ sudo apt-get build-dep emacs23
windows xp
在windows使用MinGW來編譯emacs。
-
MinGW/MSYS編譯環境
安裝MinGW 5.1.6 和MSYS基本系統(1.0.14.1)、binutils、gcc4.4.0 、w32api。
-
MinGW 安裝
安裝mingw5.1.6 ,安裝目錄在c:/mingw,如果安裝在其他目錄,注意msys的環境中要一致。
-
基本安裝
直接將msysCORE-1.0.11-bin.tar.gz解壓到c:/msys/1.0目錄下。或使用msys安裝嚮導(MSYS-1.0.11.exe) 安裝,
編輯 "C:/msys/1.0/etc/fstab" 文件, 注意用 'LF 行結束符。得到如下形式:
c:/mingw /mingw
-
更新MSYSCORE 到1.0.14
-
安裝MSys Developer Tooltkit
下載:http://downloads.sourceforge.net/mingw/msysDTK-1.0.1.exe。安裝在目錄 C:/msys/1.0 下
-
AutoTools in MSYS
更新 autoconf, automake and libtool 記住解壓到 C:/Msys/1.0
-
gcc 4.4.0 安裝
使用sf網站的GCC 4.4.0, 下載地址: http://sourceforge.net/projects/mingw/files/GCC%20Version%204/Current%20Release_%20gcc-4.4.0/gcc-full-4.4.0-mingw32-bin-2.tar.lzma/download 注意libtools工具有一個bug,使用文本編輯器編輯 MinGW/lib/gcc/mingw32/4.4.0/libstdc++.la文件(line should be library_names='')
-
Emacs 圖形支持庫
如果想要編譯的emacs能夠顯示jpeg,tiff,gif,svg,xpm等格式的文件,或是想有一個漂亮的工具欄,那麼就需要編譯支持圖形庫的emacs。把需要的圖形庫頭文件放在nt/inc目錄下或是其他地方,然後把其路徑使用-I包含進來,並把他們的dll文件與編譯後的emacs放在一起。所有的圖形庫可以去http://gnuwin32.sourceforge.net/ 下載,包括: jpeg-dev_8-1_win32.zip、jpeg_8-1_win32.zip、libpng-dev_1.4.0-1_win32.zip、libpng_1.4.0-1_win32.zip、librsvg-dev_2.26.2-1_win32.zip、librsvg_2.26.2-1_win32.zip、libtiff-dev_3.9.1-2_win32.zip、libtiff_3.9.1-2_win32.zip、xpm-nox-4.2.0-lib.zip、xpm-nox-4.2.0-bin.zip、xpm-nox-4.2.0-dep.zip
詳見《構建MSYS--GCC4.4.0編譯環境》
-
makeinfo環境
下載MiKTeX 2.8,並安裝。下載地址: http://ftp.ctex.org/mirrors/CTAN/systems/win32/miktex/setup/basic-miktex-2.8.3761.exe 在編譯插件時加入miktex的路徑。
@panshi /d/SoftEnv/emacs240/site-lisp/elib $ export PATH=$PATH:/d/SoftEnv/emacs240/bin @panshi /d/SoftEnv/emacs240/site-lisp/elib $ export PATH=/e/SoftEnv/MiKTeX/ 2.8/miktex/bin:$PATH
編譯與安裝emacs
環境配置好了,接下來的編譯安裝就很簡單了。
Ubuntu Lucid
配置:
./configure --prefix=/opt/emacs240 CPPFLAGS="-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/pango-1.0 -I/usr/include/atk-1.0"
編譯與安裝:
運行以下命令,即可在ubuntu系統上安裝emacs,並且在開始面板菜單,應用程序->編程中看到emacs 了。
bzr pull
make bootstrap
cd lisp
make autoloads
cd ..
make
make dist
sudo make install
其中make dist 製作emacs source 發行包,在$emacsrc目錄下生成emacs-$version將emacs源碼打包,這樣可以實現不同平臺源碼共用。
windows xp
configure
emacs 需要在dos環境下進行configure,然後將makefle文件轉換成unix形式。在 cmd shell 下執行如下命令
configure --with-gcc --no-cygwin --no-debug --with-svg --prefix d:/SoftEnv/emacs240 --cflags -ID:/SoftEnv/gtk+/include/gtk-2.0 --cflags -IC:/MinGW/include --cflags -IC:/msys/1.0/include --cflags -IC:/msys/1.0/local/include --cflags -ID:/SoftEnv/gtk+/include/glib-2.0 --cflags -ID:/SoftEnv/gtk+/lib/glib-2.0/include
dos2unix makefile
-
編譯安裝
在mingw下編譯與linux一樣。
bzr pull
make bootstrap
make info
cd lisp
make autoloads
cd ..
make install #將emacs安裝在 d:/SoftEnv/emacs240目錄下
-
增加對圖像的支持
雖然我們在編譯emacs時已經增加了對png、svg等圖形的支持,但安裝後的emacs找不到相關庫文件的路徑,最好將libtiff3.dll等exe、dll文件copy到安裝目錄的bin目錄下。下面是是否有image支持的運行emacs開始界面的區別。
-
註冊 Emacs
假定你安裝emacs 的目錄是d:/SoftEnv/emacs240。首先從emacs bin目錄下運行
addpm.exe
。既可以雙擊運行該程序,或在
cmd
下運行。調用
addmp.exe
將在
windows
註冊數據庫創建一個鍵值,告訴
emacs
在那兒找到支持文件,並且在開始菜單中創建一個文件夾,和連接到
runemacs.exe
快捷方式。以後可以方便地運行
emacs
了。
-
插件安裝
Cscope安裝
對於瀏覽源代碼來說,在 Emacs 裏面也有很多工具可用,比如自帶的 etags 就不錯,不過功能不如 Cscope 強大。它最初是由 Bell 實驗室開發,並且多年以來一直是 AT&T Unix 商業發行版的一部分。它已經被用於管理超過兩千萬行代碼的工程。本文主要講述編譯安裝cscope,至於如何建索引,怎樣使用cscope閱讀代碼,請參考《打造高效的跨平臺的OpenOffice.org開發環境之三--Emacs定製與擴展》《打造高效的跨平臺的OpenOffice.org開發環境之四--編輯與瀏覽OOo代碼》
under unbuntu install cscope
a. download source :
使用wget下載已打包的cscope或直接從cscope cvs代碼倉庫checkout。
wget http://219.239.26.18/download/2367991/3051978/2/bz2/0/68/1261726543872_580/cscope-15.7a.tar.bz2
or:
cvs -d:pserver:[email protected]:/cvsroot/cscope login
cvs -z3 -d:pserver:[email protected]:/cvsroot/cscope co -P cscope
b. build && install cscope
# ./configure
# make
# sudo make install // 需要root權限
c. install cscope emacs plugins
cscope/contrib/xcscope/
cscope-indexer腳本位於/usr/bin目錄下,xcscope.el被置於emacs默認的load-path
:/usr/local/bin$ sudo cp /media/develop/OpenSource/emacs/emacs_plugin/cscope/contrib/xcscope/cscope-indexer ./
:/usr/local/share/emacs$ ls ../../bin/
b2m cscope-indexer ebrowse emacs-24.0.50 etags ocs
cscope ctags emacs emacsclient grep-changelog rcs-checkin
$ sudo cp /media/develop/OpenSource/emacs/emacs_plugin/cscope/contrib/xcscope/xcscope.el /usr/share/emacs/site-lisp/
:/usr/local/share/emacs$ ls site-lisp/
cedet ecb elib jdee subdirs.el xcscope.el
d. 在~/.emacs.d/init.el文件中加入下面的語句。
;;cscope integration
(require 'xcscope)
至此,cscope安裝完成,可以使用了。
Under Windows install cscope
windows下和linux類似,只是從源碼編譯安裝很麻煩,就用編譯好的cscope.exe sort.exe,將這兩個文件以及 cscope-indexer文件copy到emacs bin目錄下。同樣cp xcscope.el 到 emace site-lisp目錄。
CEDET安裝
1、下載cedet的cvs版本
cvs -d:pserver:anonymous@cedet.cvs.sourceforge.net:/cvsroot/cedet login cvs -z3 -d:pserver:anonymous@cedet.cvs.sourceforge.net:/cvsroot/cedet co -P cedet
2、編譯
方法一:用emacs編譯*.el ,不編譯online help
../../bin/emacs -Q -l cedet-build.el -f cedet-build
或
在emacs中打開cedet-build.el文件,然後
M-x eval-buffer
M-x cedet-build-in-default-emacs
編譯過程中如果發生超過emacs堆棧大小的錯誤,退出emacs再重新編譯即可。
方法二:
cd cedet
touch `find . -name Makefile` (非cvs版本不需要這個)
a) make
或
b) make EMACS=<your favorite emacs>
或
c) make MAKEINFO=/usr/local/bin/makeinfo
或
d) make MAKEINFO=echo
如果出現下面的錯誤請用d)來編譯,或者修改錯誤文件。這個錯誤是由於文件格式不符合makeinfo要求。
/usr/local/share/emacs/site-lisp/cedet/eieio//eieio.texi:729: Cross 引用到不存在 Classes”(也許字段不正確?).
makeinfo:由於錯誤刪除宏輸出文件“/usr/local/share/emacs/site-lisp/cedet/eieio/eieio.info”;用 --force 保留宏輸出。
如果編譯過程中發生類似找不到loaddef文件,custom-autoload以及其他奇怪的錯誤,執行:
a) make clean-autoloads
b) make clean-all
然後再重新編譯。編譯錯誤還有可能是make版本引起的,請使用GNU make,或者使用windows下的安裝方法。
3、簡單配置:
;; Load CEDET
(load-file "E:/OOEnv/emacs240/site-lisp/cedet/common/cedet.el")
JDEE安裝
JDEE 安裝要求:
-
-
- 最新版的Emacs 或 XEmacs ,在windows平臺下是NT/Emacs。
Eric Ludlam開發的Collection of Emacs Development Environment Tools (CEDET)
Emacs Lisp library (elib) 包. elib-1.0.tar.gz。
JDK
IE 或firefox 瀏覽器
對windows 環境還需要bash 或其他 Unix-style shell
- 最新版的Emacs 或 XEmacs ,在windows平臺下是NT/Emacs。
-
源碼下載:
svn co https://jdee.svn.sourceforge.net/svnroot/jdee jdee
編譯前的準備
Update the Emacs Lisp load path
編譯jdee 需要speedbar, eieio, and semantic bovina 以及elib 包,在安裝好以上包的同時,需要更新lisp加載路徑,如下所示:
(add-to-list 'load-path (expand-file-name "
E:/OOEnv/emacs240/site-lisp/cedet/semantic
"))
(add-to-list 'load-path (expand-file-name "
E:/OOEnv/emacs240/site-lisp/cedet/speedbar
"))
(add-to-list 'load-path (expand-file-name "
E:/OOEnv/emacs240/site-lisp/cedet/eieio
"))
(add-to-list 'load-path (expand-file-name "
E:/OOEnv/emacs240/site-lisp/jdee/lisp
"))
(add-to-list 'load-path (expand-file-name "
E:/OOEnv/emacs240/site-lisp/elib
"))
Ensure that the JDEE is loaded at Emacs startup
(require 'jde)
編譯步驟
Ubuntu:
1、配置java classpath
請參考: http://ant-contrib.sourceforge.net/#install
2、參照jde/doc/install.html的說明,創建供ant使用的文件:~/.jdee-config.properties ,內容如下所示:
cedet.dir=/usr/local/share/emacs/site-lisp/cedet
elib.dir=/usr/local/share/emacs/site-lisp/elib
prefix.dir=/usr/local/share/emacs/site-lisp/jde
build.bin.emacs=emacs
config.time=2010/05/22 02/:51
3、Configure and build with ant
修改 build.xml使之符合java antlr的要求,並和你的antlr.jar一致,由於release-info 編譯通不過,又不影響使用,所以去掉 release-info的打包,下面的diff 是我的修改
==============================================================
--- build.xml (版本 239)
+++ build.xml (工作副本)
@@ -196,7 +196,7 @@
-
+
out="${build.release.properties.xml}"
style="${build.release.properties.xsl}">
@@ -245,7 +245,7 @@
windowtitle="JDEE ${project.version} Java API"/>
-
+
description="create the "source" distribution, which includes binaries, the docs, and the Java source">
:/developdir/emacsrc/site-lisp/jdee$ ant -p //查看ant 編譯選項
ant clean-all
ant configure
ant build
ant bindist
ant install
如果install有錯誤,請編譯好的dist下的jdee-2.4.1 copy到site-lisp目錄下,並更名爲jdee
ECB安裝
安裝要求:
-
Emacs版本:要求 >= 21 。這個不成問題,我們使用的是24.0
-
CEDET套件: 從 http://cedet.sourceforge.net可以得到,按照 http://cedet.sourceforge.net/setup.shtml 上面的說明安裝好。Emacs 24.0 已經將cedet包含在內,如果你要使用最新的cedet,也可以將內嵌cedet 屏蔽掉。
-
對java 代碼的可選項: 如果編輯java代碼,希望ECB很好工作,最好安裝JDEE 包 ( http://jdee.sourceforge.net) 。
簡單配置:
;; Load ECB
(add-to-list 'load-path "E:/OOEnv/emacs240/site-lisp/ecb")
(require 'ecb)
(require 'ecb-autoloads) ;Fast loading
注意這個段要加在cedet配置的後面
linux 編譯
修改Makefile 文件
CEDET=/usr/local/share/emacs/site-lisp/cedet
:/developdir/emacsrc/site-lisp/ecb$ make
:/developdir/emacsrc/site-lisp/ecb$ make all
如果在make 時出現以下錯誤:
...
Directories-window”(也許字段不正確?).texi:1497: Cross 引用到不存在的節點“ECB
Methods-window”(也許字段不正確?).ecb.texi:1193: Cross 引用到不存在的節點“ECB
edit-area”(也許字段不正確?).ecb//ecb.texi:975: Cross 引用到不存在的節點“The
/developdir/emacsrc/site-lisp/ecb//ecb.texi:112: Cross 引用到不存在的節點“Intera ECB commands”(也許字段不正確?).
makeinfo:由於錯誤刪除宏輸出文件“/developdir/emacsrc/site-lisp/ecb/html-help/index.html”;用 --force 保留宏輸出。
mv: 無法 stat “html-help/index.html”: 沒有那個文件或目錄
make: *** [online-help] 錯誤 1
請在make 時使用參數如下,並安裝好texinfo軟件,錯誤大多是texi文件的格式問題,@變量定義不能跨行,錯誤修改方法是讓@變量在一行內。這些錯誤不影響ecb的使用,只是online help不好使。
make ecb EMACS=emacs CEDET=/usr/local/share/emacs/site-lisp/cedet
總結
本文主要講述emacs以及在openoffice.org開發中用到的需要編譯的插件cedet、cscope、jde、ecb等在ubuntu、windows的編譯與安裝。詳細說明不同平臺下的環境配置,以及編譯過程中出現問題時處理方法。至於如何定製與配置,將在另一篇文章中講解。
進一步的工作,由於emacs在開發中,不斷增加很多新特性和新功能,需要寫一個包括源碼下載編譯,以及插件安裝配置的腳本。
參考文獻:
-
Emacs Wiki http://www.emacswiki.org/
BzrForEmacsDevs http://www.emacswiki.org/emacs/BzrForEmacsDevs
Bazaar on Windows - Quick install guide http://wiki.bazaar.canonical.com/WindowsInstall
compile-emacs-from-cvs-on-windows http://derekslager.com/blog/posts/2007/01/emacs-hack-3-compile-emacs-from-cvs-on-windows.ashx
Building Emacs on MS Windows http://www.ourcomments.org/Emacs/w32-build-emacs.html
Emacs 編輯環境 http://www.ibm.com/developerworks/cn/aix/lp/emacsnew.html
Emacs中文網 http://emacser.com/
cscope的主頁: http://cscope.sourceforge.net/
http://cedet.sourceforge.net/setup.shtml
http://jdee.sourceforge.net/install.html
http://ecb.sourceforge.net/docs/Install-and-first-steps.html#Install-and-first-steps
http://emacser.com/install-cedet.htm