1. 程式人生 > >rpm包打包過程詳解(二)——製作原始碼安裝包

rpm包打包過程詳解(二)——製作原始碼安裝包

製作原始碼安裝包(.tar.gz)

1.      解決依賴的軟體:

系統環境:[紅帽企業Linux.6.4.64位伺服器版].rhel-server-6.4-x86_64

原始碼製作中使用到的軟體為GNU M4,GNU autoconf,GNU automake;GNU autoconf,GNU automake兩者之間存在依賴關係:在安裝automake之前要完成autoconf的安裝。

該系統中這幾個軟體包分別是:

autoconf-2.63-5.1.el6.noarch.rpm

automake-1.11.1-4.el6.noarch.rpm

2.      編寫要打包的C程式;

3.      執行autoscan命令。#Autoscan ,autoscan掃描原始碼生成autoscan.log

configure.scan檔案。configure.scan包含了系統配置的基本選項,裡面都是一些巨集定義,autoscan可以用目錄名做為引數,但如果你不使用引數的話,那麼autoscan將認為使用的是當前目錄

4.      修改configure.scan檔案。並將檔案重新命名為:configure.in,只有這樣執行autoconf才會識別出來這個檔案。

-*-Autoconf -*-
# Process this file with autoconf to produce aconfigure script.
AC_PREREQ([2.68])
AC_INIT(
server,1.0)
#AC_INIT([FULL-PACKAGE-NAME], [VERSION],[BUG-REPORT-ADDRESS])


AC_CONFIG_SRCDIR([server.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE(server,1.0)
# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, andcompiler characteristics.

# Checks for library functions.

AC_OUTPUT(
[Makefile])

5.       執行aclocal命令,生成aclocal.m4

檔案。#alocal,aclocal是一個perl指令碼程式。aclocal根據configure.in或者configure.ac檔案的內容,自動生成aclocal.m4檔案。使用automake時會得到aclocal.m4巨集檔案

6.      執行autoconf命令,據configure.in和aclocal.m4生成configure檔案。#autoconf,configure是一個指令碼,它能設定源程式來適應各種不同的作業系統平臺,並且根據不同的系統來產生合適的Makefile,從而可以使你的原始碼能在不同的作業系統平臺上被編譯出來。

configure.in檔案的內容是一些巨集,這些巨集經過autoconf處理後會變成檢查系統特性、環境變數、軟體必須的引數的shell指令碼。configure.in檔案中的巨集的順序並沒有規定,但是你必須在所有巨集的最前面和最後面分別加上AC_INIT巨集和AC_OUTPUT巨集。

7.      編寫Makefile.am

AUTOMAKE_OPTIONS=foreign

 bin_PROGRAMS=server

     server_SOURCES=server.c

Makefile.am是用來生成Makefile.in的,需要你手工書寫。Makefile.am中定義了一些內容:

AUTOMAKE_OPTIONS  這個是automake的選項。在執行automake時,它會檢查目錄下是否存在標準GNU軟體包中應具備的各種檔案,例如AUTHORS、ChangeLog、NEWS等檔案。我們將其設定成foreign時,automake會改用一般軟體包的標準來檢查。

bin_PROGRAMS  這個是指定我們所要產生的可執行檔案的檔名。如果你要產生多個可執行檔案,那麼在各個名字間用空格隔開。

helloworld_SOURCES  這個是指定產生“helloworld”時所需要的原始碼。如果它用到了多個原始檔,那麼請使用空格符號將它們隔開。比如需要helloworld.h,helloworld.c那麼請寫成helloworld_SOURCES= helloworld.h helloworld.c。

如果你在bin_PROGRAMS定義了多個可執行檔案,則對應每個可執行檔案都要定義相對的filename_SOURCES。

8.      執行automake命令。執行之前需要新建config.h.in檔案

#touch config.h.in

#automake --add-missing,選項--add-missing的定義是“add missing standard files to package”,它會讓automake加入一個標準的軟體包所必須的一些檔案。

我們使用automake,根據configure.inMakefile.am來產生Makefile.in。我們用automake產生出來的Makefile.in檔案是符合GNU Makefile慣例的。

9.      接下來這幾步就跟安裝原始碼包步驟一樣了。其實我們只需要./configure就可以進行打包。後面兩步只是為了驗證一下。

#./configure,把Makefile.in變成了最終的Makefile檔案。

#make,根據Makefile編譯原始碼,連線,生成目標檔案server.o,可執行檔案server

#makeinstall如果想把這個程式安裝在你的系統裡,這個簡單的命令就可以了。安裝的目錄一般在/usr/local/bin目錄。

10.  執行make dist命令, 產生髮布軟體包檔案。#make dist . 這個命令將會將可執行檔案及相關檔案打包成一個tar.gz壓縮的檔案用來作為釋出軟體的軟體包。它會在當前目錄下生成一個名字類似“PACKAGE-VERSION.tar.gz”的檔案。PACKAGE和VERSION,是我們在configure.in中定義的AM_INIT_AUTOMAKE(PACKAGE, VERSION)。這裡就是server-1.0.tar.gz

注意事項:

1.      Configure.scan一定要重新命名為configure.in,否則autoconf不識別。

2.      Configure.in中的AC_OUTPUT(Makefile)必須和Makefile.am名字保持一致,否則automake會出錯。