本文將介紹如何使用autotools生成一個Makefile文件,並在此基礎上使用dh-make和debuild生成一個可發佈的deb程序包,這也是咱們在Linux下開發應用程序以及想要發佈應用程序須要作的。
html
不管是在Linux仍是在Unix環境中,make都是一個很是重要的編譯命令。無論是本身進行項目開發仍是安裝應用軟件,咱們都常常要用到make或 make install。利用make工具,咱們能夠將大型的開發項目分解成爲多個更易於管理的模塊,對於一個包括幾百個源文件的應用程序,使用make和 Makefile工具就能夠垂手可得的理順各個源文件之間紛繁複雜的相互關係。其中 Makefile 文件是用於自動編譯和連接的,一個工程有不少文件組成,每個文件的改變都會致使工程的從新連接,可是不是全部的文件都須要從新編譯,Makefile中紀錄有文件的信息,在make時會決定在連接的時候須要從新編譯哪些文件。linux
Makefile的基本結構不是很複雜,但當一個程序開發人員開始寫Makefile時,常常會懷疑本身寫的是否符合慣例,並且本身寫的Makefile常常和本身的開發環境相關聯,當系統環境變量或路徑發生了變化後,Makefile可能還要跟着修改。因此手動編寫Makefile,對任何程序員都是一場挑戰。幸而有GNU 提供的Autoconf及Automake這兩套工具能夠然咱們自動生成Makefile。
git
使用automake,程序開發人員只須要寫一些簡單的含有預約義宏的文件,由autoconf根據這個宏文件生成configure,由automake根據另外一個宏文件生成Makefile.in,再使用configure依據Makefile.in來生成一個符合慣例的Makefile。本文將介紹如何利用 GNU Autotools工具來協助咱們自動產生 Makefile文件,生成Makefile文件後,咱們將接着介紹如何使用dh-make和debuild建立一個Debian的安裝包文件(deb)。這個deb文件能夠拷貝到別的電腦上使用dpkg安裝使用(若是足夠好,能夠發佈!)。程序員
這是使用autotools生成Makefile文件的大致步驟。redis
我使用的是Ubuntu 13.04(32bit),使用apt-get 安裝如下工具: automake,dh-make ,devscripts。
使用apt-get install automake 將安裝 autoconf{a} automake autotools-dev{a} 三個包。
使用apt-get install dh-make 將安裝 debhelper dh-make html2text三個包。
使用apt-get install devscripts ,這個是使用debuild所須要的。
數據庫
在當前目錄下建立一個名爲hello的子目錄。進入文件夾並新建一個標準的Hello World的C代碼hello.c
#include <stdio.h>
int main(int argc, char ** argv){
printf("hello,world\n");
return 0;
}
此時,文件夾下只有一個hello.c文件,
vim
automake根據configure.in中的宏並在perl的幫助下把Makefile.am轉成Makefile.in文件。Makefile.am 文件定義所要產生的目標。咱們要填寫的 Makefile.am 內容爲如下兩句:
bin_PROGRAMS=beep // bin_PROGRAMS:定義要產生的可執行程序的文件名
beep_SOURCES=hello.c // beep_SOURCES:定義「beep」這個可執行程序所須要的原始文件。若是「beep」這個程序是由多個原始文件產生的,必須把它所用到的全部原始文件都列出來,並以空白符隔開。假設「beep」還須要「hello.c」、「main.c」、「hello.h」3個文件,則定義beep_SOURCES= hello.c main.c hello.h。若是定義多個可執行文件,則對每一個可執行程序都要定義相應的filename_SOURCES,其中filename爲要生成的可執行程序的文件名。
因此,beep 能夠替換爲你想要生成的二進制可執行文件名(後面生成deb文件也是同樣的名稱),若是我最終咱們生成的應用名爲long.deb,上面兩句就寫成:
bin_PROGRAMS=long
long_SOURCES=hello.c
當前咱們目錄下只有:hello.c Makefile.am 兩個文件
zhouyl@zhouyl:/tmp/hello$ vim Makefile.am
zhouyl@zhouyl:/tmp/hello$ ls
hello.c Makefile.am
安全
執行autoscan命令,會生成一個configure.scan文件,將configure.scan更名爲configure.in
zhouyl@zhouyl:/tmp/hello$ autoscan
zhouyl@zhouyl:/tmp/hello$ ls
autoscan.log configure.scan hello.c Makefile.am
zhouyl@zhouyl:/tmp/hello$ mv configure.scan configure.in
zhouyl@zhouyl:/tmp/hello$ lsbash
autoscan.log configure.in hello.c Makefile.am架構
configure.in 文件的內容是一系列GNU m4 的宏,這些宏經autoconf處理後會變成檢查系統特性的Shell腳本。configure.in文件中宏的順序並無特別的規定,可是每個configure.in 文件必須以宏AC_INIT開頭,以宏AC_OUTPUT結束。
打開configure.in文件咱們會看到自動生成的configure.in(scan)包括如下內容:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69]) // 此行是描述須要的工具兼容性,如咱們使用的是autotools工具版本是2.69,這個自動生成不要修改!
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) // 此行是描述咱們要生成的應用的信息,包括:應用名,版本號以及維護人郵箱(直譯爲反饋bug地址)。好比咱們須要將此行修改爲 AC_INIT([beep], [0.1], [reaper888@yeah.net])
//下面兩行形容的是軟件包的地址和名稱,以便autotools開始工做
AC_CONFIG_SRCDIR([hello.c])
AC_CONFIG_HEADERS([config.h])
// 在這咱們須要加入一行「 AM_INIT_AUTOMAKE 」,若是沒有此行,在部分系統生成Makefile時會報錯並且生成不了Makefile文件。
# Checks for programs.
AC_PROG_CC//這句高速autotools使用默認的編譯器和binutils,固然你也能夠傳入相似於「 AC_PROG_CC([gcc gcc-4.7]) 」的參數,咱們不傳參,使用默認便可
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
// 下面不變
AC_CONFIG_FILES([Makefile])// 設置configure命令所要產生的文件。咱們最終指望產生Makefile
AC_OUTPUT
因此,通過修改後,咱們的configure.in文件是:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([beep], [0.1], [reaper888@yeah.net])
AC_CONFIG_SRCDIR([hello.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
autoheader是用來映射頭文件,aclocal用來設置全部的宏(執行aclocal會產生aclocal.m4文件,若是沒有特別的要求,無需修改它。用 aclocal產生的宏將會提示automake如何動做。)。
zhouyl@zhouyl:/tmp/hello$ ls
autoscan.log configure.in hello.c Makefile.am
zhouyl@zhouyl:/tmp/hello$ autoheader
zhouyl@zhouyl:/tmp/hello$ ls
autom4te.cache autoscan.log config.h.in configure.in hello.c Makefile.am
zhouyl@zhouyl:/tmp/hello$ aclocal
zhouyl@zhouyl:/tmp/hello$ ls
aclocal.m4 autom4te.cache autoscan.log config.h.in configure.in hello.c Makefile.am
zhouyl@zhouyl:/tmp/hello$
zhouyl@zhouyl:/tmp/hello$ automake
configure.in:8: required file `./install-sh' not found
configure.in:8: `automake --add-missing' can install `install-sh'
configure.in:8: required file `./missing' not found
configure.in:8: `automake --add-missing' can install `missing'
Makefile.am: required file `./INSTALL' not found
Makefile.am: `automake --add-missing' can install `INSTALL'
Makefile.am: required file `./NEWS' not found
Makefile.am: required file `./README' not found
Makefile.am: required file `./AUTHORS' not found
Makefile.am: required file `./ChangeLog' not found
Makefile.am: required file `./COPYING' not found
Makefile.am: `automake --add-missing' can install `COPYING'
因此,根據提示,咱們缺乏 NEWS、README、AUTHORS、ChangeLog和COPYING,而使用automake --add-missing會生成COPYING,因此在此以前咱們須要手動添加這幾個文件:
zhouyl@zhouyl:/tmp/hello$ touch NEWS README AUTHORS ChangeLog
zhouyl@zhouyl:/tmp/hello$ ls
aclocal.m4 autom4te.cache ChangeLog configure.in Makefile.am README
AUTHORS autoscan.log config.h.in hello.c NEWS
注:這是我在演示如何使用autotools,若是是你真得要發佈軟件,請仔細填寫這幾個文件,而不是使用touch生成一個空文件。
如今咱們可使用automake --add-missing:
zhouyl@zhouyl:/tmp/hello$ automake --add-missing
configure.in:8: installing `./install-sh'
configure.in:8: installing `./missing'
Makefile.am: installing `./INSTALL'
Makefile.am: installing `./COPYING' using GNU General Public License v3 file
Makefile.am: Consider adding the COPYING file to the version control system
Makefile.am: for your code, to avoid questions about which license your project uses.
zhouyl@zhouyl:/tmp/hello$ ls
aclocal.m4 autom4te.cache ChangeLog configure.in hello.c install-sh Makefile.in NEWS
AUTHORS autoscan.log config.h.in COPYING INSTALL Makefile.am missing README
會發現,如今使用automake很順利,並且生成了INSTALL、COPYING等文件。
zhouyl@zhouyl:/tmp/hello$ ls
aclocal.m4 autom4te.cache ChangeLog configure.in hello.c install-sh Makefile.in NEWS
AUTHORS autoscan.log config.h.in COPYING INSTALL Makefile.am missing README
zhouyl@zhouyl:/tmp/hello$ autoconf
zhouyl@zhouyl:/tmp/hello$ ls
aclocal.m4 autom4te.cache ChangeLog configure COPYING INSTALL Makefile.am missing README
AUTHORS autoscan.log config.h.in configure.in hello.c install-sh Makefile.in NEWS
因此,咱們能夠看到,使用autoconf命令生成了configure。
接下來的工做無非就是使用configure,生成make文件:
zhouyl@zhouyl:/tmp/hello$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
……(a lot of cheaking)
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands
zhouyl@zhouyl:/tmp/hello$ls
aclocal.m4 autoscan.log config.h.in configure depcomp install-sh Makefile.in README
AUTHORS ChangeLog config.log configure.in hello.c Makefile missing stamp-h1
autom4te.cache config.h config.status COPYING INSTALL Makefile.am NEWS
因此,使用./configure生成了Makefile、config.h和其餘一些文件。
由於此時Makefile文件已經生成,因此咱們可使用make命令了:
zhouyl@zhouyl:/tmp/hello$ make
(CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /tmp/hello/missing --run autoheader)
rm -f stamp-h1
touch config.h.in
cd . && /bin/bash ./config.status config.h
config.status: creating config.h
make all-am
make[1]: 正在進入目錄 `/tmp/hello'
gcc -DHAVE_CONFIG_H -I. -g -O2 -MT hello.o -MD -MP -MF .deps/hello.Tpo -c -o hello.o hello.c
mv -f .deps/hello.Tpo .deps/hello.Po
gcc -g -O2 -o beep hello.o
make[1]:正在離開目錄 `/tmp/hello'
zhouyl@zhouyl:/tmp/hello$ ls // 使用make命令後,生成了二進制可執行文件,由於咱們在上面已經指定,因此生成的可執行文件名不是hello而是beep
aclocal.m4 autoscan.log config.h config.log configure.in hello.c install-sh Makefile.in README
AUTHORS beep config.h.in config.status COPYING hello.o Makefile missing stamp-h1
autom4te.cache ChangeLog config.h.in~ configure depcomp INSTALL Makefile.am NEWS
dslab@Raring-Ringtail:/tmp/hello$ ./beep // 運行二進制可執行文件,得正確的執行結果
hello,world
分析一下能夠發現,咱們這一步的步驟大體是這樣的:
Makefile.in -----+ +-> Makefile -----+-> make -> binary
src/Makefile.in -+-> ./configure -+-> src/Makefile -+
config.h.in -----+ +-> config.h -----+
其實此時,在當前目錄下有Makefile文件,咱們能夠作的工做有:
* make all:產生設定的目標,即生成全部的可執行文件。使用make也能夠達到此目的。
* make clean:刪除以前編譯時生成的可執行文件及目標文件(形如*.o的中間文件)。
* make distclean:除了刪除可執行文件和目標文件之外,把configure所產生的 Makefile文件也清除掉。一般在發佈軟件前執行該命令。
* make install:將使用make all或make命令產生的可執行文件以軟件的形式安裝到系統中。若使用bin_PROGRAMS宏,程序將會被安裝到 /usr/local/bin下,不然安裝到預約義的目錄下。
* make dist:將程序和相關的文檔包裝爲一個壓縮文檔以供發佈。執行完該命令,在當前目錄下會產生一個名爲PACKAGE-VERSION.tar.gz的文件。PACKAGE 和 VERSION 這兩個參數是來自configure.in文件中的AM_INIT_AUTOMAKE(PACKAGE,
VERSION)。如在上個例子中執行make dist命令,會產生名爲「hello-1.0.tar.gz」的文件。
* make distcheck:與make dist相似,可是加入了檢查包裝之後的壓縮文件是否正常。
======================= 下面步驟是生成deb程序包,Debian系專屬 ==================================
下面,咱們作的但是高端大氣上檔次的工做 -- 生成可發佈的Debian應用包 -- deb文件。(Debian系Linux專屬哦)
首先,咱們使用「 make dist 」命令,make dist將程序和相關的文檔包裝爲一個壓縮文檔以供發佈。今後,你將不再想手動寫Makefile!!
zhouyl@zhouyl:/tmp/hello$ make dist
if test -d "beep-0.1"; then find "beep-0.1" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "beep-0.1" || { sleep 5 && rm -rf "beep-0.1"; }; else :; fi
test -d "beep-0.1" || mkdir "beep-0.1"
test -n "" \
|| find "beep-0.1" -type d ! -perm -755 \
-exec chmod u+rwx,go+rx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec /bin/bash /tmp/hello/install-sh -c -m a+r {} {} \; \
|| chmod -R a+r "beep-0.1"
tardir=beep-0.1 && ${TAR-tar} chof - "$tardir" | GZIP=--best gzip -c >beep-0.1.tar.gz
if test -d "beep-0.1"; then find "beep-0.1" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "beep-0.1" || { sleep 5 && rm -rf "beep-0.1"; }; else :; fi
zhouyl@zhouyl:/tmp/hello$ ls
aclocal.m4 autoscan.log config.h config.status COPYING install-sh Makefile.in README
AUTHORS beep-0.1.tar.gz config.h.in configure hello.c Makefile missing stamp-h1
autom4te.cache ChangeLog config.log configure.in INSTALL Makefile.am NEWS
咱們能夠看到,目錄裏多了個beep-0.1.tar.gz文件。這就是咱們後續工做的核心
zhouyl@zhouyl:/tmp/hello$ mkdir ../hello_deb
zhouyl@zhouyl:/tmp/hello$ cd ../hello_deb/
zhouyl@zhouyl:/tmp/hello_deb$ cp ../hello/beep-0.1.tar.gz ./
zhouyl@zhouyl:/tmp/hello_deb$ ls
beep-0.1.tar.gz
zhouyl@zhouyl:/tmp/hello_deb$ tar -xzf beep-0.1.tar.gz
zhouyl@zhouyl:/tmp/hello_deb$ ls
beep-0.1 beep-0.1.tar.gz
zhouyl@zhouyl:/tmp/hello_deb$ cd beep-0.1/
zhouyl@zhouyl:/tmp/hello_deb/beep-0.1$ ls
aclocal.m4 ChangeLog configure COPYING install-sh Makefile.in NEWS
AUTHORS config.h.in configure.in INSTALL Makefile.am missing README
爲了建立一個Debian包,咱們首先要建立一個Debian控制文件,因此咱們須要先配置dh_make,最基本的咱們須要先配置以下兩個選項(固然,還有其餘更多的選項,如今咱們就配置最簡單的):
export DEBFULLNAME="your name"
export DEBEMAIL="a@b.com"
在此咱們須要配置Debian包的維護人名稱和郵箱,好比我就能夠寫:
export DEBFULLNAME="Zhouyl"
export DEBEMAIL="reaper888@yeah.net"
作好上述步驟後,咱們可使用「 dh_make --single -copyright=gpl3 -f ../beep-0.1.tar.gz 」 ,會提示一些確認信息,其中須要選擇"single" (s)型包。
zhouyl@zhouyl:/tmp/hello_deb/beep-0.1$ export DEBFULLNAME="Zhouyl"
zhouyl@zhouyl:/tmp/hello_deb/beep-0.1$ export DEBEMAIL="reaper888@yeah.net"
zhouyl@zhouyl:/tmp/hello_deb/beep-0.1$ dh_make --single -copyright=gpl3 -f ../beep-0.1.tar.gz
Maintainer name : Zhouyl
Email-Address : reaper888@yeah.net
Date : Mon, 14 Oct 2013 10:03:41 +0800
Package Name : beep
Version : 0.1
License : gpl3
Type of Package : Single
Hit <enter> to confirm:
Done. Please edit the files in the debian/ subdirectory now. beep
uses a configure script, so you probably don't have to edit the Makefiles.
如今咱們ls下當前目錄,會發現當前目錄下多了一個debian目錄,咱們cd進debian目錄,打開control文件:
zhouyl@zhouyl:/tmp/hello_deb/beep-0.1$ cd debian/
zhouyl@zhouyl:/tmp/hello_deb/beep-0.1/debian$ vim control
----- 下面是control內容
Source: beep // 程序包名
Section: unknown // 使用 unknown 或者misc 均可以,建議使用 misc
Priority: extra
Maintainer: Zhouyl <reaper888@yeah.net>
Build-Depends: debhelper (>= 8.0.0), autotools-dev
Standards-Version: 3.9.4
Homepage: <insert the upstream URL, if relevant> // 若是你的程序有官方網站,在此編輯上網站地址
#Vcs-Git: git://git.debian.org/collab-maint/beep.git
#Vcs-Browser: http://git.debian.org/?p=collab-maint/beep.git;a=summary
Package: beep
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: <insert up to 60 chars description>
<insert long description, indented with spaces>
cd ..進入beep-0.1目錄,使用debuild命令
dslab@Raring-Ringtail:/tmp/hello_deb/beep-0.1/debian$ cd ..
dslab@Raring-Ringtail:/tmp/hello_deb/beep-0.1$ debuild
dpkg-buildpackage -rfakeroot -D -us -uc
dpkg-buildpackage: 源碼包 beep
dpkg-buildpackage: 源碼版本 0.1-1
dpkg-buildpackage: 源碼修改者 Zhouyl <reaper888@yeah.net>
dpkg-source --before-build beep-0.1
dpkg-buildpackage: 主機架構 i386
……
gpg: 「Zhouyl <reaper888@yeah.net>」已跳過:私鑰不可用
gpg: /tmp/debsign.rFNS3UeK/beep_0.1-1.dsc: clearsign failed: 私鑰不可用
debsign: gpg error occurred! Aborting....
debuild: fatal error at line 1278:
running debsign failed
因此,此時由於須要gpg密鑰,而當前還沒設置(爲不可用的),因此遇到錯誤並退出,咱們使用 gpg --gen-key 命令:
zhouyl@zhouyl:/tmp/hello_deb/beep-0.1$ gpg --gen-key
gpg (GnuPG) 1.4.12; Copyright (C) 2012 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
請選擇您要使用的密鑰種類:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (僅用於簽名)
(4) RSA (僅用於簽名)
您的選擇?
RSA 密鑰長度應在 1024 位與 4096 位之間。
您想要用多大的密鑰尺寸?(2048)
您所要求的密鑰尺寸是 2048 位
請設定這把密鑰的有效期限。
0 = 密鑰永不過時
<n> = 密鑰在 n 天后過時
<n>w = 密鑰在 n 周後過時
<n>m = 密鑰在 n 月後過時
<n>y = 密鑰在 n 年後過時
密鑰的有效期限是?(0)
密鑰永遠不會過時
以上正確嗎?(y/n) y
您須要一個用戶標識來辨識您的密鑰;本軟件會用真實姓名、註釋和電子郵件地址組合
成用戶標識,以下所示:
「Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>」
真實姓名: Zhouyl
電子郵件地址: reaper888@yeah.net
註釋: hello for test
您選定了這個用戶標識:
「Zhouyl (hello for test) <reaper888@yeah.net>」
更改姓名(N)、註釋(C)、電子郵件地址(E)或肯定(O)/退出(Q)? O
您須要一個密碼來保護您的私鑰。
咱們須要生成大量的隨機字節。這個時候您能夠多作些雜事(像是敲打鍵盤、移動
鼠標、讀寫硬盤之類的),這會讓隨機數字發生器有更好的機會得到足夠的熵數。
隨機字節不夠多。請再作一些其餘的雜事,以使操做系統能蒐集到更多的熵!
(還須要278字節)
^[[A^[[A^[[B+++++
...+++++
咱們須要生成大量的隨機字節。這個時候您能夠多作些雜事(像是敲打鍵盤、移動
鼠標、讀寫硬盤之類的),這會讓隨機數字發生器有更好的機會得到足夠的熵數。
........+++++
...+++++
gpg: /home/dslab/.gnupg/trustdb.gpg:創建了信任度數據庫
gpg: 密鑰 A5318445 被標記爲絕對信任
公鑰和私鑰已經生成並經簽名。
gpg: 正在檢查信任度數據庫
gpg: 須要 3 份勉強信任和 1 份徹底信任,PGP 信任模型
gpg: 深度:0 有效性: 1 已簽名: 0 信任度:0-,0q,0n,0m,0f,1u
pub 2048R/A5318445 2013-10-14
密鑰指紋 = CD58 76C8 BE9C 242E ADEA F277 FE5D 11BB A531 8445
uid Zhouyl (hello for test) <reaper888@yeah.net>
sub 2048R/0FCA8EE0 2013-10-14
zhouyl@zhouyl:/tmp/hello_deb/beep-0.1$
在使用gpg --gen-key建立密鑰時,使用默認便可,在須要傳入姓名郵箱時你輸入本身的信息便可,若是在下面運行時遇到我上述錯誤時「 咱們須要生成大量的隨機字節。這個時候您能夠多作些雜事(像是敲打鍵盤、移動鼠標、讀寫硬盤之類的),這會讓隨機數字發生器有更好的機會得到足夠的熵數。 」(英文系統爲:Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need 284 more bytes)),不要驚慌,由於建立密鑰時爲了提升安全等級,會須要從系統中的隨機數熵池中選擇隨機數熵從而生成足夠好的密鑰,從而達到更好的加密效果(咱們的Linux中使用全部的操做做爲隨機數熵的源,好比說鍵盤輸入、鼠標移動以及網卡收包等,這些都是很隨機的,因此當前報錯隨機熵不夠,咱們只須要手動添加隨機熵便可,好比說多移動鼠標,多敲打鍵盤,最有效的方法是:打開另外一個終端,使用「 find / 」 命令(多開幾個會更快),這些會很快的添加隨機數熵池,上面建立密鑰會很快就繼續進行)。
此時,咱們繼續使用debuild建立deb程序包便可。
zhouyl@zhouyl:/tmp/hello_deb/$ ls
beep-0.1 beep_0.1-1.dsc beep_0.1-1_i386.changes beep_0.1.orig.tar.gz
beep_0.1-1.debian.tar.gz beep_0.1-1_i386.build beep_0.1-1_i386.deb beep-0.1.tar.gz
=====================部分引用自:【1】http://www.cnblogs.com/phinecos/archive/2008/11/27/1342381.html【2】http://www.ibm.com/developerworks/cn/linux/l-makefile/【3】http://www.yesky.com/120/1865620.shtml