vi/vim使用进阶: vimgdb调试时的常见问题及解决

<< 返回vim使用进阶: 目录

在文章在vim中使用gdb调试 – vimgdb中我介绍了如何使用vimgdb补丁在vim/gvim中调试程序。后来陆续有一些读者反馈了他们在使用中遇到的问题。在本文中总结一下。

[ 问题一: 运行GDB命令时提示”unable to read from GDB pseudo tty”? ]

有读者在试图执行GDB命令时,出现上面的提示。

出现这个问题是由于没有正确设置gdbprg变量。使用下面的命令设置一下GDB程序的位置即可解决此问题:

:set gdbprg=/path/to/gdb 

请把上面的/path/to/gdb替换成你计算机中GDB程序所在的路径。你可以把这句话加到你的vimrc中,这样每次启动vi时会自动设置此变量。

[ 问题二: 提示”GDB busy: command discarded, please try again”? ]

当你的程序需要用scanf()或者getchar()这类函数读取用户输入时,你可能会看到过这样的提示:

GDB busy: command discarded, please try again

出现这个提示,说明你的GDB正在等待用户输入,所以无法响应你所输入的其它GDB命令。

在使用vimgdb时,如果你的程序需要读取用户输入,你必须通过GDB的tty命令或run来重定向程序的标准输入。

首先,你打开一个终端(可以是xterm/rxvt/urxvt/putty/…),在此终端内输入命令tty


$ tty
/dev/pts/17 

这条命令用来显示此终端所使用的设备文件名。获得了这个设备文件名后,你就可以重定向程序的标准输入输出到这个终端,在GDB中输入下面的命令:

tty /dev/pts/17 

执行完这条命令后,程序的标准输入/输出就被重定向到/dev/pts/17了,这样,当执行到scanf()getchar()函数时,切换到那个终端输入指定参数,然后回车,程序就会继续向下执行。

[ 问题三: vimgdb可以在windows下使用吗? ]

vimgdb不能在windows下使用。不过你可以用作者提供的Clewn或Pyclewn。这两个程序可以在Windows的Vim/Gvim中使用。

这里有我写的一篇关于pyclewn的教程:在VIM中使用GDB调试 – pyclewn,clewn的用法与之类似。

[ 问题四: 按空格后vimgdb的命令窗口没有弹出来? ]

首先确保vimgdb的按键定义文件存在。执行下面的命令:

:set runtimepath?  

检查这条命令所列出的所有目录,如果任一目录中包含macros/gdb_mappings.vim文件,说明你的按键映射文件已经存在。如果你没有找到该文件,到vimgdb目录中找到这个命令,拷贝到上述任意一个目录中。

接下来用下面的命令加载vimgdb的键绑定:

:run macros/gdb_mappings.vim 

现在,你应该可以使用vimgdb所定义的快捷键了。

[参考文档]

<< 返回vim使用进阶: 目录

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/advanced-vim-skills-vim-gdb-vimgdb-faq/

文章的脚注信息由WordPress的wp-posturl插件自动生成

使用gvim+pyclewn+gdbserver进行远程调试

在以前的文章中,Easwy介绍了如何使用pyclewn在gvim中调试。网友yorker留言询问如何在vim中远程调试服务器上的程序而不需要登录服务器。这就涉及到远程调试的话题了。

所谓远程调试,顾名思义,就是在本地调试运行在远端设备上的程序。远程调试在嵌入式系统的开发上应用的比较多。嵌入式设备上内存、磁盘空间都比较有限,可能无法容纳整个gdb的调试环境和符号表;即便可以容纳,也需要对gdb进行交叉编译,比较麻烦,所以更常用远程调试的办法。像网友yorker这样在本地调试远端服务器上的程序,也是一种应用。

远程调试最简单的办法是使用gdbserver。gdbserver是一个非常小的程序,大小不到100K,因此可以方便的拷贝到嵌入式设备上,交叉编译也很简单。使用gdbserver,就可以使你的程序与远端的GDB调试器通讯,接收并执行调试命令。

gdbserver在大多数Linux系统中已经包含,不需要特别安装。如果你需要交叉编译,到GNU GDB网站上下载gdb的源代码,在里面你可以找到gdbserver。

本文将主要介绍如何在vim使用pyclewn进行远程调试(关于pyclewn的介绍,参见Easwy的的另外一篇文章:vim使用进阶: 在vim中进行GDB调试 – 使用pyclewn)。实际上,本文中所涉及的命令都是常用的远程调试命令,你可以直接使用gdb或ddd来执行这些命令,进行远程调试。

我们还使用在pyclewn一文中的程序做为调试示例,对那个程序做了一点修改,原来该程序需要由标准输入读取一个数字,现在则改为由命令行参数中传入。修改后的程序在这里下载。

现在我们准备开始调试。我们把编译好的二进制程序拷贝到一个名为Easwy_remote的计算机,然后在Easwy_remote上执行:

gdbserver Easwy_local:333 ./factorial 4 

上面的命令执行完后,屏幕输出如下(你的输出可能稍有不同):

Process ./factorial created; pid = 7532
Listening on port 333 

上面的gdbserver命令的含义是:使用gdbserver启动./factorial程序,并传入参数4,而gdbserver监听在333端口上,等待远程GDB程序中的连接。命令中的Easwy_local表明允许来自主机Easwy_local的连接,不过目前的gdbserver版本实际上是不检测所连接的主机的。

现在,我们在Easwy_local主机上启动pyclewn,并在所打开的gvim窗口中执行下面的命令:

:e main.c
:Cmapkeys
:Cfile factorial
:Cbreak 15
:Ctarget remote Easwy_remote:333
:Ccontinue

上面的命令,首先打开main.c文件,然后执行pyclewn提供的mapkeys命令,加载pyclewn的按键映射。然后使用file命令加载所要调试的程序,并在main.c的第15行设置一个断点。

需要注意的是target remote命令。这条命令告诉GDB连接到主机Easwy_remote的333端口,进行调试。执行完这条命令,我们就连接到了远端运行的程序。接下来就可以像调试本地程序那样进行调试了,在上面Easwy使用的continue命令,使程序执行到断点处,然后继续调试。

下面是远程调试的屏幕抓图:

gdbserver不仅可以像本文中这样启动一个调试进程,它还可以连接到一个已经运行的进程上对其进行调试,例如,用gdbserver Easwy_local:333 –attach 1235命令就可以使gdbserver连接到进程ID为1235的进程。

更多关于vi的内容,请参见Easwy的博客上的其它文章。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/advanced-vim-skills-vim-gdbserver/

文章的脚注信息由WordPress的wp-posturl插件自动生成

vi/vim使用进阶: 在VIM中使用GDB调试 – 使用pyclewn

<< 返回vim使用进阶: 目录

本节所用命令的帮助入口:

:help pyclewn 

在前面的文章中介绍了使用vimgdb在vim中调试程序,这种方法允许在终端中的vim,以及图形化的gvim中调试你的程序。不过它的局限也是很明显的:首先,它需要给vim的源代码打补丁并重新编译vim;另外,它只能在Linux下使用,不能在windows上进行gdb调试。

要想在vim中调试,除了使用vimgdb外,还可以使用clewn和pyclewn,这两个工具也是vimgdb的作者提供的,用法基本相同。区别在于,clewn是使用C语言编写的,而pyclewn是使用python语言编写的,具有更好的跨平台能力。本文主要介绍pyclewn工具。

使用pyclewn需要计算机上安装有python 2.4(或以上版本)以及gvim 7.0或以上版本。需注意的是,pyclewn只能与gvim配合使用,它不支持终端中的vim(clewn也是如此) (update 2011/12/27: 在vim 7.3中,最新的pyclew已经支持终端中的vim调试)。另外,gvim在编译时需要使能netbeans_intg特性和autocmd特性。

如果上面的条件都已经满足,到http://sourceforge.net/projects/pyclewn/下载pyclewn,下载后解压准备安装。安装pyclewn很简单,在我的计算机上,gvim安装目录在我的HOME目录,因此,也把pyclewn安装在HOME目录,使用如下命令:

cd /home/easwy/download/pyclewn-0.7/
vimdir=$HOME/.vim python setup.py install --home=$HOME 

在pyclewn的源码目录中有一个名为INSTALL的文件,介绍了如何在UNIX以及windows上安装pyclewn,你可以根据自己的环境决定如何安装pyclewn。

安装完pyclewn后,启动gvim,执行:help pyclewn命令,就可以看到pyclewn的帮助文件,里面有很多有用的信息。

下面通过一个例子讲解一下如何使用pyclewn进行调试。例子中所调试的程序在这里下载:调试程序下载

首先启动pyclewn。启动pyclewn的办法很简单,在一个终端中执行下面的命令就可以了:

pyclewn 

pyclewn启动时,它会启动一个gvim窗口,我们的调试将在这个gvim窗口中进行。运行pyclewn的终端将做为gdb的控制终端,所调试程序的输入输出都会通过这个终端进行(当然,你也可以在gdb中通过tty命令更改控制终端)。

接下来,我们在pyclewn所打开的gvim窗口中输入下面的命令,编译该程序,打开要调试的文件,并在文件中设置断点:

:cd pyclewn-ex
:make
:e main.c
:Cfile factorial
:Cbreak 14 

前面三条命令是标准的vim命令,切换到示例程序所在目录,编译该程序,并打开文件main.c。后面两条命令以大写字母C做为起始,这是pyclewn自定义的命令,pyclewn将会把字母C后的命令内容传递给GDB调试器。所以上面两条命令相当于在GDB中执行file factorbreak 14,加载factor做为被调试的程序,并在main.c的第14行设置一个断点。

在执行pyclewn自定义的C命令时,pyclewn会在gvim中分隔出一个窗口,用于显示GDB调试器的输入输出。所以,执行完上面命令后,屏幕看起来是这样的:

在上面已经设置好断点了,现在就可以开始调试了。pyclewn已经定义了一些调试相关的键映射,我们可以通过下面的命令加载这些键映射:

:Cmapkeys 

执行完这条命令,会在clewn_console中打印出所定义的键映射,我在此不再赘述。在下面的调试过程中,我也会使用几个最常用的映射。

我们继续调试。我在上面已经定义了一个断点,所以直接按SHIFT-R键运行程序。程序运行到断点后会停下来,然后我们连按三次CTRL-N,执行三条语句,现在切换到控制终端,可以看到程序在等待输入,我们输入一个数字,然后按回车。现在看到的屏幕是这样的:

在上面的抓图中,我们把鼠标移动到变量n上,可以看到弹出了一个小气泡,显示变量n的值为4,这和我们输入的数字是一致的。

接下来再按一次CTRL-N向下执行一个语句,然后再按SHIFT-S步进到函数factorial()中,现在gvim会打开文件util/factorial.c。然后用下面的命令,把变量t和i加入到watch窗口中:

:Cdbgvar t
:Cdbgvar i 

上面的命令会创建一个名为(clewn)_dbgvar的缓冲区,不过此缓冲区并未显示出来。用下面的命令可以新建一个窗口显示此缓冲区:

:sb (clewn)_dbgvar 

现在屏幕看起来是这样的:

按一次SHIFT-C使程序运行至结束,我们的调试也就告一段落了。

从上面的调试过程可以看出,使用pyclewn调试很方便。而且,使用pyclewn也可以在windows上进行调试,不过我没有试过,有兴趣的朋友可以试一下。在windows上调试,可能需要使用cygwin中所带的gdb。

如果觉得pyclewn缺省所设置的键映射不能满足自己的需求,也可以自己定义更多GDB调试键映射,方法是把pyclewn发行目录中的.clewn_keys.gdb拷贝到你的HOME目录,然后修改此文件定制自己的键绑定即可。

cd /home/easwy/download/pyclewn-0.7/
cp runtime/.clewn_keys.gdb $HOME 

要想了解更多关于pyclewn的使用,请阅读pyclewn的帮助手册::help pyclewn

[参考文档]

<< 返回vim使用进阶: 目录

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/advanced-vim-skills-vim-gdb-pyclewn/

文章的脚注信息由WordPress的wp-posturl插件自动生成

使用vim的命令行补全功能

网友Karl问:

有时,我在VIM中想把一个单词替换成另一个单词,用yw,然后到要被替换的单词那里:dw 然后”0P,很多个步骤。yw,dw,”0P,这样子感觉按键多而且不顺手,请问你是怎么替换的?(:s/a/b这种要敲两个单词速度也不快)

我的回答见这个链接:http://easwy.com/blog/archives/an-article-about-how-to-write-vim-script/#comment-947

Karl说用替换的方式,要敲两个单词,速度不会很快。其实,如果掌握了命令行补全功能,用替换命令的速度也不会慢。

例如,我们可以这样操作,首先移到到第一个单词处,使用“ayw把这个单词拷贝到a寄存区,然后把光标移动到第二个单词下,接着输入下面的命令:

    :%s/<C-R>a/<C-R><C-W>/g 

上面的命令使用了两个命令行补全功能,其中<C-R>a需要按住<CTRL>-R键,这时光标处会显示一个”,接下来再按a键,这个按键序列的功能是插入a寄存区所保存的内容,在我们的例子里,就是插入第一个单词;后面的<C-R><C-W>则是在命令行插入编辑区中光标下的单词,在我们的例子里,编辑区光标下的单词就是第二个单词。

如果要替换的个数比较多,使用上面的办法就比较好,可以用较少的按键完成替换功能,而且还不用担心输错单词。

命令行补全的帮助手册为:c_CTRL-Rc_CTRL-R_CTRL-W,我们可以看到,使用<C-R>系列命令,不仅可以插入各个暂存区中的内容、光标下的内容,你甚至可以使用一个表达式,来完成更复杂的工具,事实上,很多脚本中就在这样使用。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/vim-command-line-complete/

文章的脚注信息由WordPress的wp-posturl插件自动生成

两个sed小技巧

在写shell时使用sed处理一些输出,遇到两个问题,在网上找到了相应的解决办法,在此处备份一下。

[ sed处理空字符 ]

空字符,它的ASCII码值为0。在sed中如何标识空字符呢?看下面的例子:

find . -print0 | sed -e 's/\x0/\n/g'

在上面的例子中,find命令把当前目录下的文件名输出出来,以空字符分隔。输出被管道送给Sed进行处理。在sed中,则把空字符替换成回车符。

之所以用空字符做分隔符来分隔find命令的输出,是为了正确处理带空格的文件名。在上例中并没有体现出这点,我会在其它文章中说明。

[ sed使用shell中的变量 ]

在脚本中,有时希望在sed命令中使用shell定义的变量。在此时,就要用双引号而不是单引号来引用sed命令,因为对shell来说,它会处理双引号中的变量引用,而对单引号中的内容,shell完全不会动。例如:

  TERM1=term; TERM2=rxvt; echo "term" | sed -e "s/$TERM1/$TERM2/g"

注意上例中的引号用法。如果改成单引号,输出结果会不同。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/two-sed-tips/

文章的脚注信息由WordPress的wp-posturl插件自动生成

一篇介绍vim脚本编写的文章

前段时间有读者建议我写一下如何编写vim脚本,我回复说暂时没有这样的计划。因为我觉得,学习vim脚本编程的人,大多是vim的老用户了,他们完全可以参照vi手册来学习脚本编程。推广vim最困难的任务是留住vim的初学者,因此我所写的文章,也大多针对这一阶段的读者。

前几天在网上看到一篇关于vim脚本的文章,在此推荐给有兴趣的朋友:使用脚本编写 Vim 编辑器,第 1 部分: 变量、值和表达式
,英文原文为Scripting the Vim editor, Part 1: Variables, values, and expressions

在网上搜了一下,目前只看到第一部分,看来作者还在创作中。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/an-article-about-how-to-write-vim-script/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Exuberant Ctags用法:选择tag文件中所包含的tag类型

网友SamPeng问:

请问哪个参数是不解析方法中变量的。

方法中的变量纯粹是浪费tag标签。从来不用。因为一个文件里有多个同明变量

这个问题比较普遍,因此写一篇文章来解释一下。

大多数人在使用Exuberant Ctags时,一般都使用缺省的ctags -R。一般来讲,这条缺省命令已经可以满足大部分人的需求了。在某些情况下,可能对tag文件中标签的类型有特殊要求,这时就需要进行定制了。

对SamPeng所提出的问题,解决方法如下:

  1. 首先用ctags –list-kinds=<LANG>列出这个语言所支持的标签类型
  2. 然后在生成tag文件时,用ctags –<LANG>-kinds=[+|-]kinds来增加或去掉这种tag类型
  3. 需要把<LANG>换成你所用的编程语言的名字,用ctags –list-languages查看ctags支持哪些语言。

其实我们在文章vim使用进阶: 智能补全中已经用过Exuberant Ctags的定制功能了,在那篇文章里,我们使用命令

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q src 

来为OmniCppComplete插件生成定制的tag文件。仔细分析一下上面这条命令,相信你对Exuberant Ctags的了解会更加深一层的。

从上面的介绍我们可以看到,Exuberant Ctags的功能非常强大(例如,甚至可以用它为任意文件提取tag,你只需要指定生成tag的规则就行了),只是大多数人并不了解。如果你对tag文件的内容有特殊的需求,建议你仔细阅读一下Exuberant Ctags的手册。你可以在这里找到我翻译的Exuberant Ctags中文手册

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/ctags-usage-select-tag-kinds/

文章的脚注信息由WordPress的wp-posturl插件自动生成

使用FOP转换Docbook到PDF时遇到的错误及解决 (一)

本文记录了我在配置使用Apache FOP时遇到的错误以及解决方法。一方面是做个记录,将来再遇到此类问题时可以查询;另一方面也希望对其它遇到同样问题的人有所帮助。

  1. 问题:fo:inline错误

    解决

    转换vim使用进阶到PDF时,遇到了下面这样一个问题(完整错误信息见fo:inline错误):

    javax.xml.transform.TransformerException: org.apache.fop.fo.ValidationException: file:/home/easwy/tmp/advancedvim/pdf/vim_advanced_usage.fo:173:59: Error(173/59): fo:inline is not a valid child element of fo:flow.
    	at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:168)
    	at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:115)
    	at org.apache.fop.cli.Main.startFOP(Main.java:166)
    	at org.apache.fop.cli.Main.main(Main.java:197)
          

    看错误提示,是说fo:inline不是fo:flow元素的有效子结点。在网上搜了一下没找到有用的信息。仔细检查出错的位置,终于发现错误的原因,错误出在下面这个语句:

    
    <emphasis role='bold'> [文件浏览] </emphasis>
    <para>
      ...
    </para>
     

    在上面的emphasis元素是一个inline元素,对于这种inline元素来讲,一定要包含在某个块元素中。而上面的语句中,emphasis不属于任何一个para,所以出现上述错误。

    把上面的语句改成下面的形式,错误消除:

    
    <para><emphasis role='bold'> [文件浏览] </emphasis></para>
    
    <para>
      ...
    </para>
     
  2. 问题:转换PNG插图时出现空指针异常

    解决

    还是在转换vim使用进阶时,出现下面的空指针异常(详细错误信息见PNG插件导致的空指针异常):

    严重: Exception
    java.lang.NullPointerException
    	at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:168)
    	at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:115)
    	at org.apache.fop.cli.Main.startFOP(Main.java:166)
            at org.apache.fop.cli.Main.main(Main.java:197) 
          

    经排除,这个异常是在转换下面的语句时发生的:

    
      <informalfigure>
        <mediaobject>
          <alt>在vim中使用gdb调试 - vimgdb</alt>
          <imageobject>
            <imagedata fileref='http://easwy.com/blog/uploads/2009/03/vimgdb2-300x216.png' align='center'/>
    
          </imageobject>
        </mediaobject>
        <caption align='center'><link xlink:href='http://easwy.com/blog/uploads/2009/03/vimgdb2.png' xlink:show='new'>点击查看大图</link></caption>
      </informalfigure>
       

    如果把imagedata中文件的URL换成JPG格式的图像文件,则转换正常。一旦使用PNG格式的文件,就会出现上面的空指针异常提示。在网上也没找到解决办法,查看了一下自己的FOP版本:

    FOP Version 0.94      
        

    猜想可能这是旧版本的BUG,于是下载了最新的FOP trunk版本,进行编译:

    
    svn co http://svn.apache.org/repos/asf/xmlgraphics/fop/trunk/
    ant all 

    使用这个版本再进行转换,果然错误消除。

  3. 问题:zh_cn hyphenation的问题

    解决

    在我的docbook文档中,都加有xml:lang=’zh-CN’这样的标志,指明本文档的语言是中文简体。

    但每次进行PDF文件转换时,都有下面的提示:

    严重: Couldn't find hyphenation pattern zh_cn
          

    在网上搜了一下,感觉这应该不是一个问题。对其它西文语言如英语、法语等,它们以单词为单位,单词之间采用空格隔开,如果单词太长需要换行时,就要在合适的地方加上一个连字符”-“。但对中文来讲,根本没有这个需要。所以这个错误提示忽略即可。

    不过,如果提示你找不到其它语言的hyphenation,例如找不到en_US的hyphenation,就需要到Objects For Formatting Objects(OFFO)去下载,出于版权方面的考虑,hyphenation缺省不再包含在FOP中了。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/fop-errors-and-solution/

文章的脚注信息由WordPress的wp-posturl插件自动生成

vim使用进阶系列文章PDF版本下载

前几天把Apache FOP的环境搭建好后,就尝试着把vim使用进阶的docbook文档转换成PDF格式,但是转换没有成功,出现了一些错误。

昨晚调试了一个晚上,终于成功的把docbook转换成PDF了,大致浏览了一下,转换出来应该说效果还是很不错的,只是插图变得很不清晰,大概和我转换时采用的配置有关。不过现在没时间调整了,大家将就着看吧。

我已经把转换后的PDF文档上传,在文章vim使用进阶: 目录中可以找到下载链接。现在,这一系列文章将按照”署名-非商业性使用-相同方式共享”的创作共用许可协议发布,详情请见每页页脚的声明。

另外,我把下一步的写作提纲也列在vim使用进阶: 目录中了,如果你有什么感兴趣的主题,请留言提出来,对于具有普遍性的主题,我也会列入我的写作提纲。

Enjoy it!

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/advanced-vim-skills-pdf-download/

文章的脚注信息由WordPress的wp-posturl插件自动生成

如何将cscope安装到指定目录

登录博客,看到joecgs问

easwy:您好,感谢您的这一系列的文章,帮助我很快地熟悉使用vim,谢谢。
我现在是用远程的shell来写程序,服务器没有安装cscope,而又不能获取root权限。所以,我想能不能通过和安装vim一样的方式来安装cscope?

随着Linux的普及,使用Linux进行软件开发的人也越来越多。而大多数公司都采用这种方式:提供一台高性能的中央服务器做为开发编译服务器,每个人登录这台服务器进行开发编译。在这种情况下,用户通常没有root权限,怎么安装应用程序呢?

其实,Linux作为老牌多用户操作系统UNIX的一个分支,这当然不是一个问题。多用户操作系统中,允许用户根据自己的喜好安装软件,是再自然不过的事情了。

做法也很简单,UNIX的程序,一般都使用autoconf来自动检测安装环境完成配置,然后再进行编译、安装,这三步就是俗称的三板斧。

在使用autoconf进行配置时,可以使用参数来更改缺省的配置,比如,通过使用–prefix参数,就可以改变程序的安装目录,还有一些其它参数,允许用户打开或关闭某些特性。每个程序所支持的参数不一定相同,可以通过./configure –help命令查看程序支持哪些参数。

回到joecgs的问题上来,如果想把cscope安装到自己的HOME目录下,其实只需要在configure时,指定–prefix=$HOME就可以了,全部命令如下:

cd cscope-15.7
./configure --prefix=$HOME
make
make install 

如果你留心一下,我们在编译vim时,也可以指定–prefix参数。其实,对绝大多数支持autoconf的程序来说,都可以用这一参数来指定你程序的安装位置,不信你试试!

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/install-cscope-to-home/

文章的脚注信息由WordPress的wp-posturl插件自动生成