一、所要解決的問題
由于軟件項目越來越大,也增加了軟件項目管理的難度。在開發(fā)組中,每個成員都要保留一個副本,在開發(fā)中非常容易引起沖突。CVS 是為了解決這個問題的。
a、修改同步,防止一名開發(fā)人員的修改覆蓋其他人的成果。(check out、read only)
b、維護(hù)不同的版本。(按 version 查找)
c、可查找歷史記錄。防止 bug 的再引入。(diff)
CVS 為了解決這個問題,采用的方式是:
當(dāng)開發(fā)人員對源代碼進(jìn)行修改時,修改的內(nèi)容被登記(check in)到了 CVS 倉庫(repository)中。倉庫中保存了代碼的主控副本,以及歷次修改的歷史信息。它不保存文件的每個版本,而只是簡單的記錄發(fā)生在每個版本間的不同,節(jié)省磁盤空間。它能做到:
a、使開發(fā)人員的目錄和倉庫保持一致。可以把自己的修改提交(commit)給倉庫,讓倉庫更新自己。
b、允許代碼派生?梢赃M(jìn)行測試,如果失敗,可以消除所做的修改,維持原結(jié)果。
c、檢索任何一個版本。
二、使用 CVS:
a、建立倉庫:設(shè)置并 export CVSROOT 變量,并設(shè)置倉庫目錄。比如創(chuàng)建 /home/cvsroot 目錄,并合理設(shè)置權(quán)限,在 .bash_profile 中加入:export CVSROOT=$HOME/cvsroot;運行 cvs init;設(shè)置讓用戶輸入日志信息的默認(rèn)的編輯器:export EDITOR=vim。如果使用的是網(wǎng)絡(luò),則 CVSROOT 變量的形式是: export CVSROOT=:exit:user@server:/path,比如:export CVSROOT=:exit:david@power/home/projects/repository
b、導(dǎo)入文件或目錄:cvs import filename_or_directory vender_tag release_tag;這三個參數(shù)的含義是:在倉庫中這些導(dǎo)入的文件所在的目錄、供應(yīng)商標(biāo)記、發(fā)行標(biāo)記。比如 cvs import step1 david start。導(dǎo)入時的 N 表示所導(dǎo)入的文件都是新文件。
c、使用時導(dǎo)出文件,用:cvs checkout directory_name;參數(shù)含義是倉庫中所在的目錄。建立新的目錄,而不是獲取他人的改動
d、對文件修改后,保存修改到倉庫:cvs commit。
e、如果要獲得他人的修改,使用 cvs update,U 表示本地的一個文件已經(jīng)被更新。如果已經(jīng)對文件進(jìn)行了修改,而此是他人已經(jīng)修改了該文件并提交,cvs 將告訴用戶發(fā)生沖突和沖突的位置。
f、添加一個文件:cvs add filename; cvs commit。
g、刪除一個文件:先在本地刪除,然后使用 cvs remove file_name; cvs commit。
三、使用標(biāo)記
可以使用標(biāo)記記錄某個時刻文件的內(nèi)容,這在制作發(fā)行版本的過程中非常有用:
cvs tag release1.0
改動后發(fā)現(xiàn)不正常,重新獲得這個版本,則使用:cvs checkout -r release1.0
四、測試性代碼:
當(dāng)其中一個開發(fā)者對代碼進(jìn)行改進(jìn),但未來結(jié)果不能確定時,可以使用 cvs 產(chǎn)生出一個代碼的分之,這并不改變主控代碼:cvs tag -b for_test。導(dǎo)出該代碼的命令是:cvs checkout -r for_test example。由于在已有的目錄樹中不會使用該分之,因此必須重新建立目錄樹。如果測試成功,則要求將主控代碼和測試代碼合并,則先導(dǎo)出主控代碼,然后合并:
cvs checkout;cvs update -jfor_test;cvs commit。
automake
通常情況下,在寫完自己代碼后,使用 make 命令進(jìn)行編譯。make 命令其實什么也不做,知識讀取一個叫 Makefile 的文件,從中獲得 dependence and rule,然后調(diào)用 gcc 進(jìn)行編譯。但是 Makefile 比較復(fù)雜,變化技巧也比較多。對于一個大的工程項目來說,如果沒有一個統(tǒng)一的風(fēng)格,在工程延續(xù)的時候改動 Makefile 會很麻煩,也容易出錯誤。所以這時有了使用 automake 的需求。使用 automake,只需要掌握一點點規(guī)則,定義一些變量,能自動生成 Makefile。而這些 Makefile 有著統(tǒng)一的格式和結(jié)構(gòu),便于修改。下面如何使用 automake 舉出一個實際的例子。
2.1 使用 automake 的前提條件
在使用 automake 前,請先確認(rèn)在系統(tǒng)中安裝了如下軟件:
GNU Automake
GNU Autoconf
GNU m4
perl
GNU Libtool(如果需要產(chǎn)生 shared library)如果沒有的話,請在發(fā)行版中找相應(yīng)的 rpm 包。
2.2 制作 configure 腳本
autoconf 是用來生成自動配置軟件源代碼腳本(configure)的工具。configure 腳本獨立于 autoconf 運行,而且在運行的過程中,不需要用戶的干預(yù),通常不需要附帶參數(shù)。它是用來檢驗軟件必須的參數(shù)的。autoconf 從一個列舉編譯軟件時所需要各種參數(shù)的模板文件中創(chuàng)建 configure。autoconf 需要 GNU m4 來生成該腳本。
由 autoconf 生成的腳本一般起名為 configure。當(dāng)運行時,configure 創(chuàng)建了多個文件,并對這些文件中的配置參數(shù)賦予適當(dāng)?shù)闹。?configure 創(chuàng)建生成的文件有:
1。一個或多個 Makefile,在軟件源代碼的每個目錄中都生成一個 Makefile。
2。還可選的生成 C 頭文件——configurable,包含了各種 #define 聲明。
3。一個名為 config.status 的腳本,當(dāng)運行時,重新生成上面的文件。
4。一個名為 config.cache 的腳本,保存運行檢測的結(jié)果。
5。一個名為 config.log 的文件,保存有編譯器生成的信息,用于調(diào)試 configure。