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

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>
            亚洲精品免费电影| 欧美日韩国产va另类| 国产精品久久久久9999吃药| 亚洲深夜激情| 一区二区三区免费网站| 国产精品久久久久久久一区探花| 99在线热播精品免费| 一级日韩一区在线观看| 国产女人水真多18毛片18精品视频| 亚洲欧美不卡| 亚洲最新合集| 国产日韩亚洲欧美| 欧美成人中文字幕| 欧美日韩三级电影在线| 亚洲欧美成人综合| 欧美综合二区| 日韩午夜在线电影| 亚洲免费视频一区二区| 韩日在线一区| 91久久精品久久国产性色也91 | 欧美大片一区| 欧美日韩精品免费观看视频完整 | 欧美自拍偷拍| 免费久久久一本精品久久区| 亚洲一区二区视频在线观看| 欧美在线免费视频| 中文av一区特黄| 久久九九免费视频| 亚洲女同同性videoxma| 久久久久久久999精品视频| 一区二区三区蜜桃网| 久久国产精品久久w女人spa| 一区二区不卡在线视频 午夜欧美不卡在 | 国产欧美日韩另类一区| 欧美激情在线观看| 国产日韩欧美高清免费| 亚洲区国产区| 亚洲第一精品福利| 先锋影音一区二区三区| 亚洲图片欧美日产| 欧美寡妇偷汉性猛交| 狂野欧美一区| 国产亚洲精品v| 亚洲图片欧美日产| 夜夜嗨一区二区三区| 老司机成人网| 久久综合九色99| 国产一区二区剧情av在线| 亚洲午夜av电影| 一区二区三区福利| 欧美黄色视屏| 欧美黄在线观看| 影音先锋日韩有码| 久久狠狠亚洲综合| 欧美中在线观看| 欧美性猛交99久久久久99按摩| 亚洲区中文字幕| 亚洲国产日韩一区| 美日韩精品免费观看视频| 快she精品国产999| 影音先锋亚洲视频| 久久亚洲精品一区二区| 久久久免费精品视频| 国产日韩欧美日韩| 欧美在线不卡| 每日更新成人在线视频| 在线观看av不卡| 久久综合激情| 亚洲高清av在线| 亚洲精品乱码久久久久| 欧美金8天国| 亚洲毛片在线观看.| 日韩视频专区| 欧美性大战久久久久久久蜜臀| 一本久久综合亚洲鲁鲁| 欧美一区二区三区免费在线看| 国产日韩精品电影| 久久亚洲欧洲| 亚洲国产婷婷香蕉久久久久久| 一区二区三区鲁丝不卡| 欧美亚洲成人网| 午夜精品美女自拍福到在线 | 午夜精品一区二区在线观看 | 久久野战av| 亚洲韩国青草视频| 亚洲在线观看视频网站| 国内伊人久久久久久网站视频| 久久精品女人的天堂av| 亚洲高清毛片| 午夜精品免费在线| 在线观看国产日韩| 欧美日韩国产一中文字不卡| 亚洲天堂av在线免费观看| 久久久综合精品| 一区二区三区免费网站| 国产婷婷色一区二区三区在线| 久久亚洲国产成人| 一区二区三区日韩在线观看| 久久综合给合久久狠狠色| 一本大道久久a久久精品综合| 国产欧美69| 欧美黄色免费网站| 欧美中文字幕在线| 亚洲精品乱码久久久久久蜜桃91| 欧美一区深夜视频| 亚洲精品乱码久久久久久| 国产九九精品| 欧美日韩不卡视频| 久久久精品日韩欧美| 一本色道久久综合亚洲二区三区| 久久伊伊香蕉| 亚洲欧美在线播放| 日韩视频―中文字幕| 国产字幕视频一区二区| 欧美视频一二三区| 免费视频一区二区三区在线观看| 亚洲一级一区| 国产一区二区三区的电影 | 欧美电影在线免费观看网站| 亚洲欧美日韩一区二区在线| 亚洲欧洲另类| 欧美成人有码| 美女精品自拍一二三四| 欧美一区二区三区播放老司机| 亚洲美女av黄| 亚洲国产三级| 在线观看视频一区| 国产视频一区在线观看一区免费 | 欧美一进一出视频| 亚洲视频免费在线| 亚洲看片一区| 亚洲国产精品黑人久久久| 久久亚洲欧洲| 久久亚洲春色中文字幕| 久久国产精品一区二区三区四区| 亚洲一区一卡| 亚洲综合不卡| 亚洲一区亚洲| 亚洲欧美成人在线| 亚洲欧美日韩国产综合精品二区| 99视频在线精品国自产拍免费观看| 91久久精品国产91性色| 亚洲高清视频中文字幕| 亚洲国产成人av| 亚洲精品你懂的| 亚洲精品视频在线看| 亚洲精品自在久久| 99热在线精品观看| 亚洲午夜视频在线| 亚洲欧美国产毛片在线| 欧美一区二区| 久久午夜电影网| 欧美高潮视频| 亚洲免费激情| 亚洲免费在线视频一区 二区| 亚洲欧美国产三级| 久久久久99精品国产片| 久热精品视频在线观看一区| 欧美成人一区二免费视频软件| 欧美精品久久久久久| 欧美性片在线观看| 国产永久精品大片wwwapp| 尤物99国产成人精品视频| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲人线精品午夜| 亚洲成人在线视频网站| 亚洲欧洲综合另类在线| 99视频在线观看一区三区| 亚洲一区网站| 蜜桃av噜噜一区二区三区| 亚洲高清视频一区二区| 99国产精品99久久久久久| 欧美一区二区三区视频免费| 巨乳诱惑日韩免费av| 欧美日韩在线视频首页| 国产偷国产偷精品高清尤物| 在线看欧美视频| 亚洲欧美激情一区二区| 免费欧美日韩国产三级电影| 亚洲免费成人av| 久久精品道一区二区三区| 欧美日韩午夜精品| 精品999在线播放| 亚洲午夜一区二区| 欧美激情1区2区3区| 亚洲一区www| 欧美电影在线| 黄色成人在线网址| 亚洲欧美日韩成人| 亚洲国产欧美在线 | 蜜桃久久精品一区二区| 亚洲激情校园春色| 午夜宅男欧美| 欧美日韩不卡在线| 在线精品亚洲| 久久本道综合色狠狠五月| 亚洲欧洲综合另类| 久久久久久久网站| 国产日韩欧美日韩| 亚洲图色在线|