cscope在windows下使用mingw编译的方法
作者: 刘凯 mslk.sa@gmail.com
关键字:cscope.exe,cscope15.6.exe,
cscope windows,cscope win32,cscope mingw,修改编译cscope
摘要:使用 mingw 编译 cscope win32 native 的方法,本文以 cscope 最新版本 15.6 ( 20060930 )为例。
摘要:使用 mingw 编译 cscope win32 native 的方法,本文以 cscope 最新版本 15.6 ( 20060930 )为例。
因为最近想看一个大项目的源代码,两年前就知道
cscope是个比较适合的辅助工具,当时看到cscope15.5是2003年的版本,觉得好久不更新太老了就没有用,今天看到了新版本15.6(20060930)还算比较新,就决定试试它到底有多爽。
在网上找了一下,发现
windows下的版本都是很久以前的,就只好自己编译了。
下面说说我编译的方法:
gunwin32.sf.net 上的bison,flex,m4,make,PcRe,PdCurses,……
二、修改源代码
在
cmd窗口中进入cscope-15.6的目录执行:
1、
sh configure
–build=mingw32
需要等几分钟,在最后能看到信息:
config.status: creating src/Makefile
就行了
1、
进入
src
目录
2、
打开编辑
global.h
,在文件最后
#endif /* CSCOPE_GLOBAL_H */
的前面,加上两行:
#define __DJGPP__
#define __MSDOS__
3、
打开编辑
exec.c
,注释掉41行:
//#include <sys/wait.h>
4、
打开编辑
mypopen.c
,注释掉37行:
//#include <sys/wait.h>
注释掉84、85行:
//if(fd != -1 && (fcntl(fd, F_SETFD, CLOSE_ON_EXEC) != -1))
//return(fd);
5、
打开编辑
find.c
,注释掉1160行:
//(void) sleep(3);
6、
打开编辑
main.c
,
修改360行
orig_umask = umask(S_IRWXG|S_IRWXO);
为:
orig_umask = umask(S_IRWXU);
修改363行
if(mkdir(tempdirpv,S_IRWXU)) {
为:
if(mkdir(tempdirpv)) {
注释掉378行:
//signal(SIGQUIT, myexit);
注释掉381行:
//signal(SIGHUP, myexit);
注释掉404行:
//signal(SIGPIPE, SIG_IGN);/* | command can cause pipe signal */
修改895行
if (sig == SIGQUIT) {
为:
if (sig == SIGTERM ||
sig == SIGABRT ||
sig == SIGBREAK){
修改175行
fprintf(stderr, "%s: version %d%s/n", argv0,
为:
fprintf(stderr, "%s: version %d%s./tCompiled by MSLK/n", argv0,
7、
打开编辑
Makefile
,
修改133行
CURSES_LIBS = -lcurses
为:
CURSES_LIBS = -lpdcurses
–lpcre
三、
编译cscope,在
cmd窗口中进入cscope-15.6/src的目录执行:
make
–k
cscope –V
瞧一下自己编译的最新版本,很爽吧。
四、后记
cscope
配合emacs试了一下,要把
cscope-15.6/contrib/xcscope/
xcscope.el
放入
emacs/site-lisp
中, /M+x:
cscope-find-this-symbol
确实挺不错的, 比ctags的功能强多了,特别是多处出现时找着比/M+,、/M+.方便多了。
cscope –h
可以看看帮助学习学习。
编译好的cscope15.6-win32在这里下载:
http://linux.chinaunix.net/bbs/attachment.php?aid=177425
http://sourceforge.net/project/showfiles.php?group_id=196604