• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    CVS, Automake與Autoconf簡介

    發布: 2007-6-21 12:06 | 作者:   | 來源:   | 查看: 24次 | 進入軟件測試論壇討論

    領測軟件測試網

       
      第一部分 CVS簡介
    cvs ( Concurrent Version System )是一個版本控制系統,什么是版本控制系統呢?簡單的說,它可以記錄程序代碼修改的過程,有一個完整的歷史記錄( history )。

    辟如說,當你在修改程序代碼的時候, 不小心寫出了一個 bug,但是你可能很久以后才發現多出了這個 bug, 這個時候,cvs 就能很有效的幫助你找出到底是在哪一次的修改中,出現了這個 bug。
    也許你會說, 那我每次都把程序保存起來, 用tar 做好備份不就行了,當然, 你可以這樣做, 但是這太浪費空間了! cvs 在版本更改間, 只儲存不同的部分, 這樣就可以省下很多空間。
    在另一個場合里, 更能顯示出 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非常容易。

    名詞
    repository: 意為倉庫。在 cvs 里, 它就是你真正存放各歷史版本的地方。 pserver: cvs 遠程服務器,cvs 有兩種工作模式, 一種是 local, 一種是 remote。 一般通過inetd啟動pserver。
    CVSROOT: 當使用 cvs 的時候, 要設定 CVSROOT這個環境變量, 或是用 -d 選項來指定該參數,該參數指明你的倉庫放在哪里。

    本地( local )cvs
    首先, 確定一個 cvsroot,比如:
    export CVSROOT="/home/joe/cvsroot/" 建立該目錄:
    mkdir /home/joe/cvsroot
    接著,運行cvs init :
    cvs init
    cvs init 會幫你把 cvsroot 初始化。接著, 建立一個要放文件的目錄 ( 相當于一個Project ): mkdir /home/joe/cvsroot/cvsdoc
    cd /home/joe/work
    cvs checkout cvsdoc( 或者簡寫為: cvs co cvsdoc ) 你會看到下面的信息: cvs checkout: Updating cvsdoc cvs checkout 會把當前最新的版本拷貝到你的當前目錄下。
    記住, 不要自己建立 /home/joe/work/cvsdoc, 該目錄下還會有一些用于管理的 cvs 相關的信息。
    接著, 進入 cvsdoc 目錄, 編輯 cvs.doc 這個文件檔案,輸入一些信息。
    然后,運行:
    cvs add cvs.txt cvs commit -m "Initial revision." cvs add 就會把 cvs.txt 加入 cvs 維護的文件列表中去。
    cvs commit 檢查當前目錄下所有的在文件列表中的文件,并把對他們的改動加入到倉庫中。-m 表示這次 commit 的 message,一般說明此次修改的相關信息。
    現在修改一下 cvs.txt,并且,在文件檔案的最上面加上 $Id$ 的字樣。
    改完之后, 再 commit 一次:
    cvs commit -m "Adding new stuff."
    現在看看我們所做的修改:
    cvs log cvs.txt
    可以看到:
    RCS file: /home/joe/cvsroot/cvsdoc/cvs.txt,v
    Working file: cvs.txt
    head: 1.2
    branch:
    locks: strict
    access list:
    symbolic names:
    keyword substitution: kv
    total revisions: 2; selected revisions: 2
    description:
    ----------------------------
    revision 1.2
    date: 2000/09/11 11:55:06; author: joe; state: Exp; lines: +2 -0
    i
    ----------------------------
    revision 1.1
    date: 2000/09/11 11:52:32; author: joe; state: Exp;
    initial version
    ==================================================================
    你會看到每次修改加進去的 message。這對開發者,特別是一個大的項目的開發者,其幫助是不言而喻的。
    cvs diff -r 1.1 -r 1.2 cvs.txt
    可以看到:
    Index: cvs.txt
    ================================================================== RCS file: /home/joe/cvsroot/cvsdoc/cvs.txt,v
    retrieving revision 1.1
    retrieving revision 1.2
    diff -r1.1 -r1.2
    0a1
    > $Id: cvs.txt,v 1.2 2000/09/11 11:55:06 joe Exp $
    1a3
    > hehe,sencond time edit it!
    這樣會顯示 1.1 和 1.2 版的 diff, 原本有 1.1 版的人, 只需要用這個 patch 就可以了升級到1.2了!
    再編輯 cvs.txt, 可以發現最上面的 Id 變長了? 加了一代串文字:
    $Id: cvs.txt,v 1.2 2000/09/11 11:55:06 joe Exp $ 這顯示這個版本的一些相關信息。
    遠程( remote )cvs
    如果我們要做一個比較大的項目,上面講的本地cvs服務就太簡單了,我們要讓眾多的人可以遠程開發程序! 比如我們要用cvs組織起我們的minigui項目。 檢查 /etc/services 有沒有這兩行,沒有請加入:
    cvspserver 2401/tcp #CVS network server cvspserver 2401/udp #CVS network server
    在 /etc/inetd.conf 加入:
    cvspserver stream tcp nowait root /usr/local/bin/cvs cvs --allow-root=/home/minigui pserver
    mkdir /home/minigui
    要是該設置生效,請重啟inetd。
    添加用戶anoncvs, 這是要給匿名cvs 用戶使用的帳號,其組為nogroup。 新加一個名為 minigui的 group。 添加參與 minigui開發的用戶的帳號, 當然, 把他們的 group 設為 minigui。
    cvs -d /home/minigui init
    cd /root/minigui, 這是原來已經存在的版本, 現在我們要把它的東西放進 cvs 倉庫里: 比如,我們把minigui的庫minigui03放到倉庫中:

    cd minigui03;cvs import –m “the lib” minigui03 joe start

    會看到cvs把一個個文件放到倉庫中。
    cvs import 的語法為:

    cvs import -m "log msg" projname vendortag releasetag

    vendortag 和releasetag 一般不需要關心,我們這里使用一個用戶名和一個start 標志。
    我們把其它相關的project也放到cvs倉庫中:

    cd miniguiapps03 ; cvs import –m “the apps” miniguiapps03 joe start
    cd miniguiexec03 ; cvs import –m “the demos” miniguiexec03 joe start

    這樣,我們就把minigui的一個cvs服務器建立好了。
    注意, 一個 user 要遠程訪問某些project, 他必須擁有適當的權限。比如,minigui03這個目錄應該屬于組minigui,且組可寫。才能使minigui組里的用戶可以遠程參與minigui庫的開發。

    現在試試看從遠程訪問 cvs 服務器。
    首先, 在你的機器上建立一個工作目錄, 譬如是 /home/joe/work
    cd /home/joe/work
    cvs -d :pserver:joe@www.minigui.org:/home/minigui login
    cvs -d :pserver:joe@www.minigui.org:/home/minigui co minigui03
    cvs -d :pserver:joe@www.minigui.org:/home/minigui co miniguiapps03
    cvs -d :pserver:joe@www.minigui.org:/home/minigui co miniguiexec03
    cvs -d :pserver:joe@www.minigui.org:/home/minigui logout

    當你敲入login行時,系統會提示你輸入password, 打進去。 www.minigui.org是cvs服務器所在的機器。 該指定被執行后,該 cvsroot
    (:pserver:joe@www.minigui.org:/home/minigui) 和加密后的密碼會被存在 ~/.cvspass 里。
    底下幾行取出各個project。最后logout。

    cd minigui03

    做了一些修改后,可以commit出去:

    cvs commit -m "little change"
    上面是一般開發者的登陸方法,對于匿名cvs, 可以讓其不需要輸入口令即可登陸,但是不能讓其commint。這需要:
    1. 將要開放的project設為全局可讀寫,因為cvs服務器在操作時要在相應目錄下設置讀寫瑣(即需要創建一些臨時文件),所以即使是check out 操作,也需要目錄可寫。
    2. 為了讓匿名用戶只有check out權限,可以在CVSROOT目錄下建立一個readers文件,其中每一行是一個用戶,這些用戶只具有只讀權限。比如:
    anonymous
    anoncvs
    guest
    jbrowse
    3. 利用passwd文件,使匿名用戶不能用其它方式登陸。典型為:
    在文件CVSROOT/passwd 中:
    anoncvs:XR4EZcEs0szik
    在文件/etc/passwd 中為:
    anoncvs:!:1729:105:Anonymous CVS User:/home/minigui:/bin/false
    CVSROOT/passwd文件是cvs提供的一個專用于存放cvs密碼的文件。它的典型格式為:
    joe:XR4EZcEs0szik:jane
    表示cvs用戶joe其實是內部用戶jane,其cvs密碼加密后被存放在第二個字段,這樣就將cvs服務與系統的其它部分分離開來,大大地提高了系統的安全性。
    上面介紹的是使用需要嚴格的安全認證的pserver服務器,如果您在局域網內開發程序,則可以使用rsh或者ssh,設置非常簡單,服務器端只要開放著 rsh或ssh服務器,客戶端設置兩個環境變量:CVS_RSH與CVSROOT,可以將它們的設置寫入預處理腳本,比如使用ssh連接:

    $export CVS_RSH="ssh"
    $export CVSROOT=":ext:joe@www.minigui.org:/home/minigui"

    $ cvs co miniguiexec03
    joe@192.9.200.75's password:

    輸入密碼,就可以得到一份miniguiexec03的拷貝了。


    總結
    以上只是一個簡介,cvs還有很多高級功能,如果您需要更詳細的信息,請看cvs 的info或者到gnu上下載html版本的manual。

    第二部分 使用Automake,Autoconf生成Makefile
    在Unix上寫過程序的人尤其是用 C 來開發程序的人一般都遇到過 Makefile,用 make 來開發和編譯程序的確很方便,可是要寫出一個Makefile就不那么簡單了。GNU Make 那份幾百頁的文件,讓許多人害怕。當然,現在關于make的文檔比較多,不過寫一個Makefile總是一件很煩人的事情,GNU Autoconf 及 Automake 這兩個軟件就是幫助程序開發者輕松產生Makefile 文件的,F在的GNU軟件如Apache, MySQL Minigui等都是利用Autoconf,Automake實現自動編譯的。用戶只要使用 “./configure”, “make”, “make install” 就可以把程序安裝到系統中。

    簡介
    Makefile 基本上就是『目標』(target), 『關聯』(dependencies) 和『動作』三者所組成的一系列規則。而 make 就是根據 Makefile 的規則決定如何編譯 (compile) 和連接 (link) 程序或者其它動作。當然,make 可做的不只是編譯和連接程序,例如 FreeBSD 的 port collection 中,Makefile還可以做到自動下載遠程程序,解壓縮 (extract) , 打補丁 (patch),設定,然后編譯,安裝到系統中。

    Makefile 基本結構雖然很簡單,但是妥善運用這些規則就可以變換出許多不同的花樣。卻也因為這樣,許多人剛開始學寫Makefile 時會覺得沒有規范可以遵循,每個人寫出來的Makefile都不大一樣,不知道從哪里下手,而且常常會受到開發環境的限制,只要環境參數不同或者路徑更改,可能 Makefile 就得跟著修改。雖然有GNU Makefile Conventions (GNU Makefile慣例)制訂出一些在進行 GNU 程序設計時寫 Makefile 的一些標準和規范,但是其內容很長而且很復雜,并且經常作一些調整,為了減輕程序開發人員維護Makefile 的負擔,就出現了Automake。

    利用Automake,編程者只需要寫一些預先定義好的宏 (macro),提交給Automake處理,就會產生一個可以供 Autoconf 使用的 Makefile.in文件。再配合使用 Autoconf產生的自動配置文件 configure 即可產生一份符合 GNU Makefile 慣例的 Makeifle 了。


     

    需要的軟件
    在開始使用 Automake 之前,首先確認你的系統安裝有如下軟件:

    1. GNU Automake
    2. GNU Autoconf
    3. GNU m4
    4. perl
    5. GNU Libtool (如果你需要產生 shared library)

    最好也使用 GNU C/C++ 編譯器 、GNU Make 以及其它 GNU 的工具程序來作為開發的環境,這些工具都是屬于 Open Source Software 不但免費而且功能強大。如果你是使用 Red Hat Linux 可以找到所有上述軟件的 rpm 文件!

    一個簡單的例子
    Automake 所產生的 Makefile 除了可以做到程序的編譯和連接,也可以用來生成文檔(如 manual page, info 文件等),還可以有把源碼文件包裝起來以供發布,所以程序源代碼所存放的目錄結構最好符合GNU 的標準慣例,接下來就用一個hello.c ?磣鑫。\

    在工作目錄下建立一個新的子目錄devel,再在 devel 下建立一個"hello"' 的子目錄,這個目錄將
    作為存放 hello這個程序及其相關文件的地方:

    % mkdir devel;cd devel;mkdir hello;cd hello

    用編輯器寫一個hello.c文件,

    #include <stdio.h>
    int main(int argc, char** argv)
    {
    printf(“Hello, GNU!n”);
    return 0;
    }

    接下來就要用 Autoconf 及 Automake ?聿

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>