青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

isware

制作automake以及rpm包的過程

autoconf、automake以及rpm包的制作過程

第一步:

    在root下建立目錄hello-cxf-1.0,然后在該目錄下新建子目錄src和doc(doc幾乎存放一些文檔,但在這里暫時為空)。

    #mkdir hello-cxf-1.0

    #cd hello-cxf-1.0

    #mkdir src

    #mkdir doc

第二步:

在src目錄下編輯文件main.c

#cd src

#vi main.c

#include <stdio.h>

int main(void)

{

        printf("this is hello-cxf-1.0 testing!\n");

        return 0;

}

第三步:

    回到hello-cxf-1.0目錄下,編輯configure.ac(或者叫做configure.in)和Makefile.am文件。

configure.ac的例子:

AC_PREREG(2.59)

#AC_INIT(FULL-PACKAGE-NAME, VERSION,BUG-REPORT-ADDRESS)

AC_INIT(hello-cxf,1.0)

AM_INIT_AUTOMAKE([foreign])

AC_CONFIG_SRCDIR([src/main.c])

 

 

AC_CONFIG_HEADER([src/config.h])

 

#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

                 src/Makefile

                 doc/Makefile

                ])

AC_OUTPUT

其中,

1.可以通過運行 autoscan(生成configure.ac的模板文件) , 自動創建兩個文件: autoscan.log configure.scan,修改configure.scan的文件名為configure.in或者configure.ac,

2.最簡單的configure.ac必須包含的AC_INIT (package, version, [bug-report], [tarname])、AC_CONFIG_FILES([files])、AC_OUTPUT三個宏,有用到automake的話,則必須添加 AM_INIT_AUTOMAKE和AC_PROG_CC宏。automake一般是要用到的,因為生成的configure會根據 Makefile.in生成Makefile文件,而Makefile.in可以有automake生成。

Makefile.am文件要在當前目錄,子目錄都個建一份,如下:

Hello-cxf-1.0目錄下Makefile.am的例子:

AUTOMAKE_OPTIONS=foreign

SUBDIRS = src doc

Src目錄下Makefile.am的例子:

bin_PROGRAMS = hello-cxf

hello_cxf_SOURCES = main.c

 

#hello_cxf_LDADD = -lpthread

#hello_cxf_debug_LDADD= -lpthread-debug

#SUBDIRS = lib

Doc目錄下的Makefile.am是個空的。

注意:

Makefile.am就是一系列變量的定義。Makefile的語法:變量名 = 變量值。

Makefile.am的編寫

1.    需要生成Makefile的目錄下都要編寫一個Makefile.am

2.    頂層(項目)目錄的Makefile.am,可能會包含AUTOMAKE_OPTIONS = foreign 1.4這樣一句。

3.    如果當前目錄有其它子目錄,子目錄中也要生成makefile,則要包含
SUBDIRS = 子目錄…,例如:SUBDIRS = src doc

4.    對于不需要安裝,但是需要一起打包發布的文件,則在當前目錄的Makefile.am中可以添加一句:EXTRA_DIST = 發布的文件,例如:EXTRA_DIST = purge.conf purge

5.    Makefile.am中的變量名,有統一的命名機制,一般是:安裝目錄_主變量。

6.    安裝目錄。
有些標準的安裝目錄可以直接使用。例:bin_PROGRAMS = hello,表示hello將被安裝在$(prefix)/bin目錄下。但是這些標準安裝目錄可能不夠使用,因此我們可以自己定義所需要的安裝目錄。安裝目錄一般是省略’dir’的,例如:
htmldir = $(prefix)/html
html_DATA = automake.html
就表示automake.html將被安裝在$(prefix)/html目錄下。這里DATA是主變量,稍后說明。
對于不安裝的文件,變量名的目錄變量可寫為noinst。

7.    主變量。常見的主變量有:`PROGRAMS'、`LIBRARIES'、 `LISP'、`SCRIPTS'、`DATA'、 `HEADERS'、`MANS'和`TEXINFOS'。這些主變量說明了生成的對象類型。例如,主變量PROGRAMS 保存了需要被編譯和連接的程序的列表。

8.    Makefile.am的例子。
目錄結構:
  purge-1.2
   |―·doc
   |     |-purge.conf
   |     |-Makefile.am
   |-·src
   |     |-purge.h
   |     |-thread.h
   |     |-…
   |     |-list.h
   |     |-debug.c
   |     |-fun.c 
   |     |-list.c
   |     |-main.c
   |     |-map.c
   |     |-parseconf.c
   |     |-purge.c
   |     |-thread.c
   |     |-Makefile.am
   |-hello-0.1.0.spec
   |-configure.ac
   |-Makefile.am
各目錄下的Makefile.am文件可以編寫如下:
purge-1.2目錄:vi Makefile.am
    AUTOMAKE_OPTIONS = foreign 1.4
    SUBDIRS = src doc
doc目錄:vi Makefile.am
    EXTRA_DIST = purge.conf
src目錄:vi Makefile.am
    bin_PROGRAMS = purge
    purge_SOURCES = main.c purge.c fun.c list.c \
                     parseconf.c thread.c debug.c map.c
    purge_LDADD = -lpthread
說明:

a)      在Makefile.am也可以定義變量如:
ALL_SOURCE = main.c purge.c fun.c list.c parseconf.c thread.c debug.c map.c
purge_SOURCES = $( ALL_SOURCE)

b)      名字中除了字母、數字和下劃線之外的所有字符都將用下劃線代替。例如,如果你的程序被命名為sniff-glue,那么派生出的變量名將是 sniff_glue_SOURCES,而不是sniff-glue_SOURCES;庫liblob.a的’_SOURCES’變量對應的變量名 為’liblob_a_SOURCES’,而不是’liblob.a_SOURCES’。

9.    注:共享庫必須被安裝,所以不允許使用 `noinst_LTLIBRARIES'和`check_LTLIBRARIES'。

10.  Makefile.am中configure輸出變量的使用。
在configure.ac中通過宏AC_SUBST引出的變量在Makefile.am中就能被使用到。
例子:
在configure.ac中定義如下:
if test -z "$CACHE_ICP_PORT"; then
       CACHE_ICP_PORT="3130"
fi
AC_SUBST(CACHE_ICP_PORT)
在Makefile.am中通過@CACHE_ICP_PORT@格式就能引用變量CACHE_ICP_PORT。
例子:DEFAULT_ICP_PORT        = @CACHE_ICP_PORT@

第四步:

運行 aclocal, 它根據configure.ac或者configure.in生成一個“aclocal.m4”文件和一個緩沖文件夾autom4te.cache,該文件主要處理本地的宏定義。

在hello-cxf-1.0目錄下運行aclocal。

#aclocal

#ls

第五步:

運行 autoconf, 根據configure.ac和aclocal.m4生成configure腳本。

#autoconf

#ls

第六步:

運行 autoheader,它負責生成config.h.in文件。該工具通常會從“acconfig.h”文件中復制用戶附加的符號定義。即 autoheader根據configure.ac,運行m4,生成config.h.in(該文件名由 AC_CONFIG_HEADER([src/config.h])的定義而定)

#autoheader

#ls

第七步:

使用automake根據Makefile.am和aclocal.m4生成Makefile.in文件,在這里使用選項“—adding- missing”可以讓automake自動添加有一些必需的腳本文件,如depcomp,install-sh, missing等。

#automake –adding-missing

第八步:

運行./configure根據makefile.in和config.h.in(如果有的話)生成makefile和config.h(如果有 config.h.in)文件,及config.status,config.log用于記錄檢測到的一些狀態。即通過運行自動配置設置文件 configure,把Makefile.in變成了最終的Makefile。

#./configure

#ls

其中,autoreconf 相當于連續執行aclocal autoconf autoheader automake --add-missing。

第九步:

運行 make,對配置文件Makefile進行測試一下。

#make

….

#ls

#ls src/

可以看到,在src文件下面生成了main.c的輸出文件hello-cxf。

第十步:

運行生成的文件hello-cxf

#./src/hello-cxf

this is hello-cxf-1.0 testing!

 

注意:

Makefile文件

自動生成的Makefile文件常用幾個命令如下:
make all - 生成程序、庫、文檔等,等同于make,根據Makefile編譯原始碼,連接,生成目標文件,可執行文件。
make install - 安裝
make install-strip -安裝,去除調試符號
make uninstall - 卸載
make clean - 清除臨時文件,make all 的反過程,即清除上次的make命令所產生的object文件(后綴為“.o”的文件)及可執行文件。

 make dist - 創建發布包:PACKAGE-VERSION.tar.gz.

 

 

rpm 打包過程如下:

make:根據Makefile編譯原始碼,連接,生成目標文件,可執行文件。

第一步:

創建發布包,運行make dist命令

#make dist

#ls

// 生成hello-cxf-1.0.tar.gz

注:make dist
  產生發布軟件包文件(即distribution package)。這個命令將會將可執行文件及相關文件打包成一個tar.gz壓縮的文件用來作為發布軟件的軟件包。
  他會在當前目錄下生成一個名字類似“PACKAGE-VERSION.tar.gz”的文件。PACKAGE和VERSION,是我們在configure.in中定義的AM_INIT_AUTOMAKE(PACKAGE, VERSION)。

第二步:

#make distcheck

注意:

make distcheck-生成發布軟件包并對其進行測試檢查,以確定發布包的正確性。這個操作將自動把壓縮包文件解開,然后執行configure命令,并且執行make,來確認編譯不出現錯誤,最后提示你軟件包已準備好,能發布了。

make distclean-類似make clean,但同時也將configure生成的文件全部刪除掉,包括Makefile。

第三步:

我用的是as4.0,首先查看一下/usr/src/redhat/目錄下面是否有BUILD  RPMS  SOURCES  SPECS  SRPMS這些子目錄,如果沒有,則創建。

把上一步生成的hello-cxf-1.0.tar.gz包復制到/usr/src/redhat/SOURCES/目錄下:

#cp hello-cxf-1.0.tar.gz /usr/src/redhat/SOURCES/

第四步:

編輯將應用程序打包(package)必須的配置文件spec文件。

我的hello-cxf-1.0.spec配置文件為:

%define _name hello-cxf

%define _ver  1.0

%define _rel 1.0

 

Summary:It's a hello-cxf program

Name: %{_name}

Version: 1.0

Release: %{_rel}

License: Copyright

Group:Amusements/Games

Source: %{_name}-%{_ver}.tar.gz

BuildRoot: /var/tmp/hello-cxf-1.0-root

 

%description

print Hello-cxf world

 

%prep

%setup -q

#tar zxf %{_name}-%{_ver}.tar.gz

 

%build

./configure

make

 

%install

rm -rf %{buildroot}

make DESTDIR="$RPM_BUILD_ROOT" install

 

%post

echo "OK, Hello is already installed for you!"

%postun

echo "OK, Hello is already uninstalled for you!"

echo "Thanks for using!"

 

%clean

rm -rf $RPM_DUILD_ROOT

 

%files

%defattr(-,root,root)

/usr/local/bin/hello-cxf

 

%changelog

第五步:

#rpmbuild -ba hello-cxf-1.0.spec

rpmbuild讀入spec文件上的配置信息,自動生成rpm包。

第六步:

安裝:rpm -ivh name-version-release.architecture.rpm (由剛rpmbuild -bb ×××.spec生成的rpm安裝包)

可以先查看一下再/usr/src/redhat/RPMS/i386目錄下是否已經生成了rpm包。

# cd /usr/src/redhat/RPMS/

# ls

athlon  i386  i486  i586  i686  noarch

# ls i386/

hello-cxf-1.0-1.0.i386.rpm  hello-cxf-debuginfo-1.0-1.0.i386.rpm

# rpm –ivh hello-cxf-1.0-1.0.i386.rpm

第七步:

運行#hello-cxf即可

# hello-cxf

this is hello-cxf-1.0 testing!

 

注意:

rpm文件命名規則:name-version-release.architecture.rpm
name指軟件名,version軟件 版本,release發布版本,architecture表示該rpm包適用的平臺(指cpu),典型的有:src, noarch, i386, i686,ppc64,x86_64,ia64,sparc64。其中src, noarch這兩種適用各種平臺,i386, i686(32位),x86_64(64位),這三種比較常見。

rpm常用的命令:
安裝:rpm -ivh name-version-release.architecture.rpm
升級:rpm –Uvh name-version-release.architecture.rpm
卸載:rpm -e name ;rpm -e name-version ;rpm -e name-version-release
版本查詢:rpm -q name
其它命令:
    rpm -qi name  詳細信息查詢

    rpm -qpl name-version-release.architecture.rpm  rpm文件列表(該rpm包將安裝的文件)

    rpm -qa 已經安裝的所有rpm包。

rpm -ivh --nodeps name-version-release.architecture.rpm 中-nodeps選項可以忽略對其它rpm軟件包的依賴。
    rpm -qf filename查看該文件屬于哪個rpm包。
rpmbuid常用命令

    rpmbuild -bb|-bs|-ba ×××.spec

rpmbuild -tb|-ts|-ta ×××.tar.gz        //spec文件在tar.gz中

-bb 和 -tb打包成二進制包

-bs 和 -ts 打包成源碼包

-ba 和 -ta打包成二進制包和源碼包

posted on 2011-06-01 13:25 艾斯維亞 閱讀(994) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品1区| 亚洲精品乱码久久久久久日本蜜臀| 亚洲精品永久免费精品| 蜜桃伊人久久| 亚洲国产欧美不卡在线观看| 欧美大片国产精品| 欧美大秀在线观看| 一本色道久久加勒比88综合| 99视频在线观看一区三区| 欧美日韩一区二区三区在线观看免| 制服丝袜亚洲播放| 亚洲综合欧美| 激情婷婷亚洲| 亚洲欧洲午夜| 国产精品无码专区在线观看| 久久久久一本一区二区青青蜜月| 久久久久久亚洲精品不卡4k岛国| 亚洲国产成人av在线| 欧美黄色精品| 国产精品国内视频| 久久精品国产精品亚洲| 狼人社综合社区| 亚洲女同性videos| 欧美一区二区三区四区在线 | 亚洲欧美视频在线| 尤物九九久久国产精品的分类| 欧美激情第三页| 国产精品一二一区| 亚洲国产综合在线| 国产伦精品一区二区三区视频黑人| 美女主播一区| 国产精品乱人伦一区二区| 久久综合给合| 国产精品久久国产精品99gif | 亚洲激情第一区| 亚洲视屏一区| 亚洲人人精品| 久久国产精品网站| 亚洲一级黄色av| 欧美 日韩 国产一区二区在线视频 | 欧美精品一区二区三| 欧美主播一区二区三区| 欧美日韩xxxxx| 欧美+亚洲+精品+三区| 国产乱人伦精品一区二区| 亚洲伦理自拍| 91久久中文字幕| 久久久精品国产免大香伊| 亚洲欧美日韩国产另类专区| 欧美精品亚洲精品| 欧美国产综合| 樱桃成人精品视频在线播放| 亚洲欧美日韩中文播放| 亚洲一区二区三区精品视频| 欧美精品在线视频| 亚洲国产精品热久久| 亚洲成色777777在线观看影院 | 久久久不卡网国产精品一区| 国产精品久久久久免费a∨大胸| 亚洲国产精品久久久久婷婷老年| 伊人伊人伊人久久| 久久青草久久| 麻豆9191精品国产| 韩日欧美一区二区| 久久久夜精品| 欧美不卡视频一区| 1000部精品久久久久久久久| 久久野战av| 亚洲第一级黄色片| 亚洲人永久免费| 欧美顶级艳妇交换群宴| 亚洲激精日韩激精欧美精品| 亚洲最新合集| 欧美色123| 亚洲男女自偷自拍| 欧美一区二区观看视频| 国产一区二区在线免费观看 | 久久久久久九九九九| 久久免费视频一区| 在线成人欧美| 欧美精品九九99久久| av72成人在线| 久久精品国产一区二区三区免费看 | 久久午夜视频| 亚洲韩国青草视频| 亚洲欧美区自拍先锋| 国产亚洲福利| 免费亚洲电影| 一区二区三区黄色| 久久精品国产在热久久| 亚洲国产天堂久久综合| 欧美日韩精品一区二区三区四区| 中文高清一区| 蜜桃久久av| 亚洲特级毛片| 狠狠v欧美v日韩v亚洲ⅴ| 欧美wwwwww| 亚洲免费在线观看| 欧美国产日本韩| 欧美一级在线播放| 亚洲国产一区二区三区a毛片| 欧美日精品一区视频| 久久爱另类一区二区小说| 亚洲国产成人一区| 久久精品一区二区三区四区| 亚洲老板91色精品久久| 国产丝袜一区二区| 欧美日本韩国| 久久免费视频一区| 亚洲在线视频一区| 亚洲人成在线观看| 免费欧美在线视频| 性做久久久久久久免费看| 亚洲三级性片| 国产综合欧美| 国产精品视频| 欧美日韩国产精品一区| 久久久亚洲人| 欧美一级大片在线免费观看| 日韩视频一区二区三区| 欧美电影电视剧在线观看| 欧美亚洲免费在线| 亚洲午夜一二三区视频| 亚洲精品一区二区三| 韩国女主播一区二区三区| 国产精品青草综合久久久久99| 欧美高清视频一区二区| 久久久免费av| 欧美中文字幕视频在线观看| 亚洲午夜三级在线| 一本久道久久综合狠狠爱| 亚洲国产影院| 欧美国产日韩在线| 欧美大尺度在线观看| 六月天综合网| 久热精品视频在线| 麻豆国产精品777777在线| 久久精品国产999大香线蕉| 性色av一区二区三区在线观看| 亚洲午夜精品福利| 在线亚洲伦理| 一区二区三区色| 一区二区日韩精品| 一区二区国产日产| 亚洲四色影视在线观看| 在线亚洲欧美| 亚洲自拍高清| 午夜亚洲福利在线老司机| 欧美在线观看视频| 先锋影音久久| 久久久久久黄| 欧美成人在线网站| 亚洲激情成人| 中文网丁香综合网| 亚洲欧美国产精品桃花| 午夜日韩在线观看| 久久精品国产亚洲一区二区三区| 久久久久国色av免费看影院| 久久国产精品久久久久久| 久久久噜噜噜久久| 欧美高清视频www夜色资源网| 欧美日本韩国| 国产乱子伦一区二区三区国色天香| 国产在线不卡精品| 亚洲福利在线看| 中文国产成人精品久久一| 欧美一级二级三级蜜桃| 另类酷文…触手系列精品集v1小说| 欧美夫妇交换俱乐部在线观看| 亚洲国产欧美一区二区三区久久 | 亚洲人成精品久久久久| 在线一区二区三区做爰视频网站| 亚洲综合欧美| 美女黄网久久| 国产精品s色| 亚洲第一偷拍| 亚洲午夜在线视频| 鲁大师影院一区二区三区| 亚洲精美视频| 欧美在线视频a| 欧美精品在线免费观看| 国产一区二区三区无遮挡| 亚洲国产综合91精品麻豆| 亚洲综合清纯丝袜自拍| 老色鬼精品视频在线观看播放| 亚洲精品视频在线播放| 欧美一区二区日韩| 欧美另类专区| 在线观看国产精品淫| 亚洲欧美国产高清| 欧美顶级艳妇交换群宴| 亚洲一区在线免费观看| 欧美成va人片在线观看| 国产视频亚洲精品| 91久久久久久久久| 久久午夜色播影院免费高清| 在线视频免费在线观看一区二区| 久久深夜福利免费观看| 国产亚洲视频在线| 亚洲一区二区三区在线|