📄 xplore 查看主题 - linux 下编程的三个重要工具!.htm
字号:
alt=管理团队 hspace=3
src="Xplore 查看主题 - Linux 下编程的三个重要工具!.files/icon_mini_groups.gif"
width=12 border=0>管理团队</A> </SPAN></TD></TR>
<TR>
<TD vAlign=top noWrap align=middle height=25><SPAN
class=mainmenu> <A class=mainmenu
href="http://bbs.xplore.cn/profile.php?mode=editprofile"><IMG
height=13 alt=用户资料 hspace=3
src="Xplore 查看主题 - Linux 下编程的三个重要工具!.files/icon_mini_profile.gif"
width=12 border=0>用户资料</A> <A class=mainmenu
href="http://bbs.xplore.cn/privmsg.php?folder=inbox"><IMG
height=13 alt=没新信息 hspace=3
src="Xplore 查看主题 - Linux 下编程的三个重要工具!.files/icon_mini_message.gif"
width=12 border=0>没新信息</A> <A class=mainmenu
href="http://bbs.xplore.cn/login.php?logout=true&sid=38971f6fa859c4e0efc2bbfe80e1d56f"><IMG
height=13 alt="退出登陆 [ ZT ]" hspace=3
src="Xplore 查看主题 - Linux 下编程的三个重要工具!.files/icon_mini_login.gif"
width=12 border=0>退出登陆 [ ZT
]</A> </SPAN></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=2 cellPadding=2 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=bottom align=left colSpan=2><A class=maintitle
href="http://bbs.xplore.cn/viewtopic.php?t=154&start=0&postdays=0&postorder=asc&highlight=">Linux
下编程的三个重要工具!</A><BR><SPAN class=gensmall><B></B><BR>
</SPAN></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=2 cellPadding=2 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=bottom noWrap align=left><SPAN class=nav><A
href="http://bbs.xplore.cn/posting.php?mode=newtopic&f=18"><IMG
alt=发表新贴 src="Xplore 查看主题 - Linux 下编程的三个重要工具!.files/post.gif"
align=middle border=0></A> <A
href="http://bbs.xplore.cn/posting.php?mode=reply&t=154"><IMG
alt=回复主题 src="Xplore 查看主题 - Linux 下编程的三个重要工具!.files/reply.gif"
align=middle border=0></A></SPAN></TD>
<TD vAlign=center align=left width="100%"><SPAN
class=nav> <A class=nav
href="http://bbs.xplore.cn/index.php">Xplore 论坛首页</A> -> <A
class=nav href="http://bbs.xplore.cn/viewforum.php?f=18">UNIX/Linux
编程</A></SPAN></TD></TR></TBODY></TABLE>
<TABLE class=forumline cellSpacing=1 cellPadding=3 width="100%"
border=0><TBODY>
<TR align=right>
<TD class=catHead colSpan=2 height=28><SPAN class=nav><A class=nav
href="http://bbs.xplore.cn/viewtopic.php?t=154&view=previous">上一主题</A>
:: <A class=nav
href="http://bbs.xplore.cn/viewtopic.php?t=154&view=next">下一主题</A>
</SPAN></TD></TR>
<TR>
<TH class=thLeft noWrap width=150 height=26>主题作者</TH>
<TH class=thRight noWrap>贴子内容</TH></TR>
<TR>
<TD class=row1 vAlign=top align=left width=150><SPAN class=name><A
name=383></A><B>mlsx</B></SPAN><BR><SPAN
class=postdetails>超级管理员<BR><IMG alt=""
src="Xplore 查看主题 - Linux 下编程的三个重要工具!.files/mlsx.jpg"
border=0><BR><BR>注册日期: 2003年12月20日<BR>发贴数量: 716<BR>所在位置:
湘潭大学</SPAN><BR></TD>
<TD class=row1 vAlign=top width="100%" height=28>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width="100%"><A
href="http://bbs.xplore.cn/viewtopic.php?p=383#383"><IMG
title=发表贴子 height=9 alt=发表贴子
src="Xplore 查看主题 - Linux 下编程的三个重要工具!.files/icon_minipost.gif"
width=12 border=0></A><SPAN class=postdetails>发表时间:
2004年02月12日 22:59<SPAN class=gen> </SPAN>
贴子标题: Linux 下编程的三个重要工具!</SPAN></TD>
<TD vAlign=top noWrap><A
href="http://bbs.xplore.cn/posting.php?mode=quote&p=383"><IMG
title=引用回复 alt=引用回复
src="Xplore 查看主题 - Linux 下编程的三个重要工具!.files/icon_quote.gif"
border=0></A> </TD></TR>
<TR>
<TD colSpan=2>
<HR>
</TD></TR>
<TR>
<TD colSpan=2><SPAN class=postbody>CVS, Automake与Autoconf简介
<BR>第一部分 CVS简介 <BR>cvs ( Concurrent Version System
)是一个版本控制系统,什么是版本控制系统呢?简单的说,它可以记录程序代码修改的过程,有一个完整的历史记录( history
)。辟如说,当你在修改程序代码的时候, 不小心写出了一个 bug,但是你可能很久以后才发现多出了这个 bug,
这个时候,cvs 就能很有效的帮助你找出到底是在哪一次的修改中,出现了这个 bug。 <BR>也许你会说,
那我每次都把程序保存起来, 用tar 做好备份不就行了,当然, 你可以这样做, 但是这太浪费空间了! cvs 在版本更改间,
只储存不同的部分, 这样就可以省下很多空间。 <BR>在另一个场合里, 更能显示出 cvs 的好处
,比如多人一起开发软件的时候。 cvs支持远程访问, 用户可以对他要修改的文件加上正在编辑的标志,
让别人知道他要修改这个文件了。 当然, 一个较大的开发队伍,一般还会需要一个 mailing list 用来沟通。毕竟cvs
只是一个管理程序代码的工具, 他并不扮演沟通的角色。 cvs的同类软件还有rcs和sccs。RCS ( Revision
Control System ) 可以从FSF获得。SCCS ( Source Code Control System )
由AT&T在SystemV中引入,现在已经被加入X/Open标准( Unix 98?
)。比起这些软件,CVS的要优秀得多,特别是在支持多人远程开发方面。由于CVS出现较新,所以使用上反而没有它们普及。当然,如果您熟悉rcs,您会发现学习cvs非常容易。
<BR><BR>名词 <BR>repository: 意为仓库。在 cvs 里, 它就是你真正存放各历史版本的地方。
pserver: cvs 远程服务器,cvs 有两种工作模式, 一种是 local, 一种是 remote。
一般通过inetd启动pserver。 <BR>CVSROOT: 当使用 cvs 的时候, 要设定
CVSROOT这个环境变量, 或是用 -d 选项来指定该参数,该参数指明你的仓库放在哪里。 <BR><BR>本地(
local )cvs <BR>首先, 确定一个 cvsroot,比如: <BR>export
CVSROOT="/home/joe/cvsroot/" 建立该目录: <BR>mkdir
/home/joe/cvsroot <BR>接着,运行cvs init : <BR>cvs init <BR>cvs
init 会帮你把 cvsroot 初始化。接着, 建立一个要放文件的目录 ( 相当于一个Project ): mkdir
/home/joe/cvsroot/cvsdoc <BR>cd /home/joe/work <BR>cvs
checkout cvsdoc( 或者简写为: cvs co cvsdoc ) 你会看到下面的信息: cvs
checkout: Updating cvsdoc cvs checkout 会把当前最新的版本拷贝到你的当前目录下。
<BR>记住, 不要自己建立 /home/joe/work/cvsdoc, 该目录下还会有一些用于管理的 cvs
相关的信息。 <BR>接着, 进入 cvsdoc 目录, 编辑 cvs.doc 这个文件档案,输入一些信息。
<BR>然后,运行: <BR>cvs add cvs.txt cvs commit -m "Initial
revision." cvs add 就会把 cvs.txt 加入 cvs 维护的文件列表中去。 <BR>cvs
commit 检查当前目录下所有的在文件列表中的文件,并把对他们的改动加入到仓库中。-m 表示这次 commit 的
message,一般说明此次修改的相关信息。 <BR>现在修改一下 cvs.txt,并且,在文件档案的最上面加上 $Id$
的字样。 <BR>改完之后, 再 commit 一次: <BR>cvs commit -m "Adding new
stuff." <BR>现在看看我们所做的修改: <BR>cvs log cvs.txt <BR>可以看到: <BR>RCS
file: /home/joe/cvsroot/cvsdoc/cvs.txt,v <BR>Working file:
cvs.txt <BR>head: 1.2 <BR>branch: <BR>locks: strict <BR>access
list: <BR>symbolic names: <BR>keyword substitution: kv
<BR>total revisions: 2; selected revisions: 2 <BR>description:
<BR>---------------------------- <BR>revision 1.2 <BR>date:
2000/09/11 11:55:06; author: joe; state: Exp; lines: +2 -0
<BR>i <BR>---------------------------- <BR>revision 1.1
<BR>date: 2000/09/11 11:52:32; author: joe; state: Exp;
<BR>initial version
<BR>==================================================================
<BR>你会看到每次修改加进去的 message。这对开发者,特别是一个大的项目的开发者,其帮助是不言而喻的。
<BR>cvs diff -r 1.1 -r 1.2 cvs.txt <BR>可以看到: <BR>Index:
cvs.txt
<BR>==================================================================
RCS file: /home/joe/cvsroot/cvsdoc/cvs.txt,v <BR>retrieving
revision 1.1 <BR>retrieving revision 1.2 <BR>diff -r1.1 -r1.2
<BR>0a1 <BR>> $Id: cvs.txt,v 1.2 2000/09/11 11:55:06 joe
Exp $ <BR>1a3 <BR>> hehe,sencond time edit it! <BR>这样会显示
1.1 和 1.2 版的 diff, 原本有 1.1 版的人, 只需要用这个 patch 就可以了升级到1.2了!
<BR>再编辑 cvs.txt, 可以发现最上面的 Id 变长了? 加了一代串文字: <BR>$Id: cvs.txt,v
1.2 2000/09/11 11:55:06 joe Exp $ 这显示这个版本的一些相关信息。 <BR>远程(
remote )cvs
<BR>如果我们要做一个比较大的项目,上面讲的本地cvs服务就太简单了,我们要让众多的人可以远程开发程序!
比如我们要用cvs组织起我们的minigui项目。 检查 /etc/services 有没有这两行,没有请加入:
<BR>cvspserver 2401/tcp #CVS network server cvspserver
2401/udp #CVS network server <BR>在 /etc/inetd.conf 加入:
<BR>cvspserver stream tcp nowait root /usr/local/bin/cvs cvs
--allow-root=/home/minigui pserver <BR>mkdir /home/minigui
<BR>要是该设置生效,请重启inetd。 <BR>添加用户anoncvs, 这是要给匿名cvs
用户使用的帐号,其组为nogroup。 新加一个名为 minigui的 group。 添加参与
minigui开发的用户的帐号, 当然, 把他们的 group 设为 minigui。 <BR>cvs -d
/home/minigui init <BR>cd /root/minigui, 这是原来已经存在的版本,
现在我们要把它的东西放进 cvs 仓库里: 比如,我们把minigui的库minigui03放到仓库中:
<BR><BR>cd minigui03;cvs import –m “the lib” minigui03 joe
start <BR><BR>会看到cvs把一个个文件放到仓库中。 <BR>cvs import 的语法为:
<BR><BR>cvs import -m "log msg" projname vendortag releasetag
<BR><BR>vendortag 和releasetag 一般不需要关心,我们这里使用一个用户名和一个start 标志。
<BR>我们把其它相关的project也放到cvs仓库中: <BR><BR>cd miniguiapps03 ; cvs
import –m “the apps” miniguiapps03 joe start <BR>cd
miniguiexec03 ; cvs import –m “the demos” miniguiexec03 joe
start <BR><BR>这样,我们就把minigui的一个cvs服务器建立好了。 <BR>注意, 一个 user
要远程访问某些project,
他必须拥有适当的权限。比如,minigui03这个目录应该属于组minigui,且组可写。才能使minigui组里的用户可以远程参与minigui库的开发。
<BR><BR>现在试试看从远程访问 cvs 服务器。 <BR>首先, 在你的机器上建立一个工作目录, 譬如是
/home/joe/work <BR>cd /home/joe/work <BR>cvs -d
:pserver:joe@www.minigui.org:/home/minigui login <BR>cvs -d
:pserver:joe@www.minigui.org:/home/minigui co minigui03
<BR>cvs -d :pserver:joe@www.minigui.org:/home/minigui co
miniguiapps03 <BR>cvs -d
:pserver:joe@www.minigui.org:/home/minigui co miniguiexec03
<BR>cvs -d :pserver:joe@www.minigui.org:/home/minigui logout
<BR><BR>当你敲入login行时,系统会提示你输入password, 打进去。 <A
href="http://www.minigui.org是cvs服务器所在的机器。/"
target=_blank>http://www.minigui.org是cvs服务器所在的机器。/</A>
该指定被执行后,该 cvsroot
<BR>(:pserver:joe@www.minigui.org:/home/minigui) 和加密后的密码会被存在
~/.cvspass 里。 <BR>底下几行取出各个project。最后logout。 <BR><BR>cd
minigui03 <BR><BR>做了一些修改后,可以commit出去: <BR><BR>cvs commit -m
"little change" <BR>上面是一般开发者的登陆方法,对于匿名cvs,
可以让其不需要输入口令即可登陆,但是不能让其commint。这需要: <BR>1.
将要开放的project设为全局可读写,因为cvs服务器在操作时要在相应目录下设置读写琐(即需要创建一些临时文件),所以即使是check
out 操作,也需要目录可写。 <BR>2. 为了让匿名用户只有check
out权限,可以在CVSROOT目录下建立一个readers文件,其中每一行是一个用户,这些用户只具有只读权限。比如:
<BR>anonymous <BR>anoncvs <BR>guest <BR>jbrowse <BR>3.
利用passwd文件,使匿名用户不能用其它方式登陆。典型为: <BR>在文件CVSROOT/passwd 中:
<BR>anoncvs:XR4EZcEs0szik <BR>在文件/etc/passwd 中为:
<BR>anoncvs:!:1729:105:Anonymous CVS
User:/home/minigui:/bin/false
<BR>CVSROOT/passwd文件是cvs提供的一个专用于存放cvs密码的文件。它的典型格式为:
<BR>joe:XR4EZcEs0szik:jane
<BR>表示cvs用户joe其实是内部用户jane,其cvs密码加密后被存放在第二个字段,这样就将cvs服务与系统的其它部分分离开来,大大地提高了系统的安全性。
<BR>上面介绍的是使用需要严格的安全认证的pserver服务器,如果您在局域网内开发程序,则可以使用rsh或者ssh,设置非常简单,服务器端只要开放着
rsh或ssh服务器,客户端设置两个环境变量:CVS_RSH与CVSROOT,可以将它们的设置写入预处理脚本,比如使用ssh连接:
<BR><BR>$export CVS_RSH="ssh" <BR>$export
CVSROOT=":ext:joe@www.minigui.org:/home/minigui" <BR><BR>$ cvs
co miniguiexec03 <BR><A
href="mailto:joe@192.9.200.75">joe@192.9.200.75</A>'s
password: <BR><BR>输入密码,就可以得到一份miniguiexec03的拷贝了。
<BR><BR><BR>总结 <BR>以上只是一个简介,cvs还有很多高级功能,如果您需要更详细的信息,请看cvs
的info或者到gnu上下载html版本的manual。 <BR><BR>第二部分
使用Automake,Autoconf生成Makefile <BR>在Unix上写过程序的人尤其是用 C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -