久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    Autoconf和Automake工具組簡介

     ccwan 2011-07-28
    Autoconf和Automake工具組簡介
    來源: ChinaUnix博客  日期: 2009.04.20 16:24 (共有0條評論) 我要評論  
    本文摘自Linux高級程序設(shè)計(楊宗德 鄧玉春 曾慶華)
    Autoconf/Automake工具用于自動創(chuàng)建功能完善的makefile文件。當(dāng)前大多數(shù)軟件包都是用這一工具生成makefile文件的。本節(jié) 首先介紹Autoconf/Automake工具的功能以及makefile創(chuàng)建過程中所涉及的文件和命令。最后以一個實例介紹如何使用Autoconf /Automake工具自動創(chuàng)建makefile文件。
    Autoconf/Automake工具組簡介
    Autoconf/Automake工具組主要包括autoconf、automake、perl語言環(huán)境和m4。其中FC4默認安裝的autoconf和automake軟件包信息如下:
    [root@localhost hello]# rpm -qa |grep autoconf  //查看是否安裝autoconf
    autoconf-2.59-5
    [root@localhost hello]# rpm -qa |grep automake  //查看是否安裝automake
    automake14-1.4p6-12
    automake-1.9.5-1
    automake17-1.7.9-6
    automake15-1.5-13
    automake16-1.6.3-5
    默認安裝的perl語言環(huán)境如下:
    [root@localhost ~]# rpm -qa |grep perl  //
    查看perl的安裝情況,已經(jīng)安裝后才有以下信息
    perl-Filter-1.30-7
    perl-URI-1.35-2
    perl-HTML-Tagset-3.04-1
    perl-libwww-perl-5.803-2
    perl-XML-Encoding-1.01-27
    perl-XML-NamespaceSupport-1.08-7
    perl-Crypt-SSLeay-0.51-6
    perl-XML-Grove-0.46alpha-27
    perl-5.8.6-15
    perl-DateManip-5.42a-4
    perl-HTML-Parser-3.45-1
    perl-Compress-Zlib-1.34-2
    perl-XML-Parser-2.34-6
    perl-XML-Dumper-0.71-4
    perl-libxml-enno-1.02-31
    perl-Convert-ASN1-0.19-1
    perl-XML-SAX-0.12-7
    perl-LDAP-0.33-1
    perl-XML-LibXML-1.58-2
    perl-XML-Twig-3.17-1
    perl-Parse-Yapp-1.05-33
    perl-libxml-perl-0.08-1
    perl-XML-LibXML-Common-0.13-8
    默認安裝的m4軟件包如下:
    [root@localhost ~]# rpm -qa |grep m4  //查看是否安裝m4工具
    m4-1.4.3-1
    如果讀者沒有獲得以上任何一個軟件包的完全安裝,請直接插入FC4安裝盤,使用"system-config-packages"命令更新,在開發(fā)工具中選中以上選項即可。
    以下命令用來查看本節(jié)所使用的Autoconf/Automake命令所在位置:
    [root@localhost hello]# whereis aclocal    //查看aclocal命令所在位置
    aclocal: /usr/bin/aclocal /usr/share/aclocal
    [root@localhost hello]# whereis autoscan   //查看autoscan命令所在位置
    autoscan: /usr/bin/autoscan /usr/share/man/man1/autoscan.1.gz
    [root@localhost hello]# whereis autoconf   //查看autoconf命令所在位置
    autoconf: /usr/bin/autoconf /usr/share/autoconf /usr/share/man/man1/autoconf.1.gz
    [root@localhost hello]# whereis autoheader   //查看autoheader命令所在位置
    autoheader: /usr/bin/autoheader /usr/share/man/man1/autoheader.1.gz
    [root@localhost hello]# whereis automake   //查看automake命令所在位置
    automake: /usr/bin/automake /usr/local/automake
    使用Autoconf/Automake工具自動生成Makefile文件的流程圖如圖2-5所示。在此過程中使用的命令主要有aclocal、autoscan、autoconf、autoheader和automake。由圖可知運行步驟如下:
    (1)創(chuàng)建源代碼文件,使用"autoscan"生成configure.scan文件,將其重命名為configure.ac,并做適當(dāng)修改,然后使 用"aclocal"命令生成aclocal.m4文件,使用"autoconf"命令由configure.ac和aclocal.m4文件生成 configure文件。
    (2)手工編輯Makefile.am文件,使用"automake"命令生成configure.in文件。
    (3)手工編輯或由系統(tǒng)給定acconfig.h文件,使用"autoheader"命令生成config.h.in文件。
    (4)使用"configure"命令由configure、configure.in和config.h.in文件生成Makefile文件。從而完成Makefile文件的創(chuàng)建過程。
    下面以自動編譯hello.c程序為例介紹如何使用這組工具生成makefile文件。
    1.使用Vi編輯器編輯源程序
    在Linux操作Shell提示符使用Vi編輯器下創(chuàng)建hello.c源程序。
    [root@localhost ch0206]# mkdir hello  //創(chuàng)建文件夾
    [root@localhost ch0206]# cd hello   //切換文件
    [root@localhost hello]# ls    //已經(jīng)創(chuàng)建的hello.c文件
    hello.c
    [root@localhost hello]# cat hello.c   //C源程序代碼
    int main(int argc,char** argv)
    {
    printf("hello!GNU\n");
    return 0;
    }
    2.使用Autoscan工具生成configure.ac文件
    Autoscan工具用來掃描源代碼以搜尋一般的可移植性問題,比如檢查編譯器、庫和頭文件等,并創(chuàng)建configure.scan文件,它會在給定目錄及其子目錄樹中檢查源文件,若沒有給出目錄,就在當(dāng)前目錄及其子目錄樹中進行檢查。如下所示:
    [root@localhost hello]# autoscan .///在當(dāng)前文件夾中搜索
    autom4te: configure.ac: no such file or directory
    autoscan: /usr/bin/autom4te failed with exit status: 1
    [root@localhost hello]# ls   //生成configure.scan文件,它是configure.ac文件原型
    autoscan.log  configure.scan  hello.c
    [root@localhost hello]# cat configure.scan     //configure.scan文件內(nèi)容
    #                        -*- Autoconf -*-
    # Process this file with autoconf to produce a configure script.
    AC_PREREQ(2.59)          //autoconf版本號
    AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS) //軟件的名稱和版本等信息
    AC_CONFIG_SRCDIR([hello.c])       //偵測源碼文件
    AC_CONFIG_HEADER([config.h])    //用于生成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_OUTPUT        //輸入文件名
    下面給出本文件的簡要說明(所有以"#"號開始的行為注釋):
    (1)AC_PREREQ宏聲明本文件要求的autoconf版本,本例使用的版本為2.59。
    (2)AC_INIT宏用來定義軟件的名稱和版本等信息,"FULL-PACKAGE-NAME"為軟件包名稱,"VERSION"為軟件版本號,"BUG-REPORT-ADDRESS"為BUG報告地址(一般為軟件作者郵件地址)。
    (3)AC_CONFIG_SRCDIR宏用來偵測所指定的源碼文件是否存在,來確定源碼目錄的有效性。此處為當(dāng)前目錄下的hello.c。
    (4)AC_CONFIG_HEADER宏用于生成config.h文件,以便autoheader使用。
    (5)AC_PROG_CC用來指定編譯器,如果不指定,選用默認gcc。
    (6)AC_OUTPUT用來設(shè)定 configure 所要產(chǎn)生的文件,如果是makefile,configure會把它檢查出來的結(jié)果帶入makefile.in文件產(chǎn)生合適的makefile。使用 Automake時,還需要一些其他的參數(shù),這些額外的宏用aclocal工具產(chǎn)生。
    中間的注釋可以分別添加用戶測試程序、測試函數(shù)庫和測試頭文件等宏定義。
    此文件只是下面要使用的configure.ac文件的原型,要使用此文件,還需要根據(jù)情況修改相關(guān)內(nèi)容。
    [root@localhost hello]# cp configure.scan configure.ac //復(fù)制文件
    [root@localhost hello]# ls
    autoscan.log  configure.ac  configure.scan  hello.c
    [root@localhost hello]# cat configure.ac
    #                                               -*- Autoconf -*-
    # Process this file with autoconf to produce a configure script.
    AC_PREREQ(2.59)
    AC_INIT(hello,1.0,yangzongde@163.com)    //在此行內(nèi)容中設(shè)置當(dāng)前軟件包信息
    AM_INIT_AUTOMAKE(hello,1.0)      //automake所必備的宏,必須添加
    AC_CONFIG_SRCDIR([hello.c])      //源文件名
    AC_CONFIG_HEADER([config.h])      //config文件
    # 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_OUTPUT(Makefile)        //輸出文件名為makefile
    此文件的相關(guān)內(nèi)容需要根據(jù)當(dāng)前軟件和系統(tǒng)環(huán)境進行配置,但是,AM_INIT_ AUTOMAKE宏需要自己添加,它是automake所必備的宏,同前面一樣,PACKAGE是要產(chǎn)生的軟件套件的名稱,VERSION是版本編號。其他設(shè)置請參閱注釋內(nèi)容。
    3.使用aclocal工具生成aclocal.m4
    aclocal工具用于掃描configure.ac文件生成aclocal.m4。此工具根據(jù)已經(jīng)安裝的宏、用戶定義宏和acinclude.m4文件中的宏將configure.ac文件需要的宏集中定義到文件aclocal.m4中。
    [root@localhost hello]# aclocal     //執(zhí)行aclocal生成aclocal.m4文件
    [root@localhost hello]# ls
    aclocal.m4  autom4te.cache  autoscan.log  configure.ac  configure.scan  hello.c
    4.使用autoconf工具生成configure文件
    將configure.ac中的宏展開,生成configure腳本。這個過程可能要用到aclocal.m4中定義的宏。
    [root@localhost hello]# autoconf   //執(zhí)行autoconf生成configure文件
    [root@localhost hello]# ls
    aclocal.m4      autoscan.log  configure.ac    hello.c
    autom4te.cache  configure     configure.scan
    5.使用autoheader工具生成config.h.in文件
    autoheader工具負責(zé)生成config.h.in文件。該工具會從"acconfig.h"文件中復(fù)制用戶附加的符號定義。此步驟可以在第3或第4步之前完成。
    [root@localhost hello]# find / -name acconfig.h  //系統(tǒng)acconfig.h文件位置
    /usr/src/kernels/2.6.11-1.1369_FC4-i686/include/acpi/acconfig.h
    [root@localhost hello]# autoheader
    [root@localhost hello]# ls       //查看生成的config.h.in文件
    aclocal.m4      autoscan.log  configure     configure.scan
    autom4te.cache  config.h.in   configure.ac  hello.c
    6.創(chuàng)建Makefile.am文件
    Automake工具會根據(jù)configure.in中的參量把Makefile.am轉(zhuǎn)換成Makefile.in文件。在使用Automake工具前,讀者需要手工創(chuàng)建腳本配置文件Makefile.am。本例中,作者創(chuàng)建的文件如下所示:
    [root@localhost hello]# ls Makefile.am
    Makefile.am
    [root@localhost hello]# cat Makefile.am    // Makefile.am范例
    AUTOMAKE_OPTIONS = foreign       //軟件等級
    bin_PROGRAMS = hello        //可執(zhí)行文件名
    hello_SOURCES = hello.c       //源文件名
    其中:
    (1)AUTOMAKE_OPTIONS為設(shè)置Automake的選項。由于GNU對自己發(fā)布的軟件有嚴格的規(guī)范,比如必須附帶許可證聲明文件 COPYING等,否則Automake執(zhí)行時會報錯。Automake提供了3種軟件等級:foreign、gnu和gnits,供用戶選擇,默認等級 為gnu。本例使需用foreign等級,它只檢測必須的文件。
    (2)bin_PROGRAMS定義要產(chǎn)生的執(zhí)行文件名。如果要產(chǎn)生多個執(zhí)行文件,每個文件名用空格隔開。
    (3)hello_SOURCES定義"hello"這個執(zhí)行程序所需要的原始文件。如果"hello"這個程序是由多個原始文件所產(chǎn)生的,則必須把它所 用到的所有原始文件都列出來,并用空格隔開。例如:若目標(biāo)體"hello"需要"hello.c"、"hello.h"兩個依賴文件,則定義 hello_SOURCES=hello.c hello.h。
    7.使用Automake生成Makefile.in文件
    下面使用Automake生成"Makefile.in"文件,使用選項"--add-missing"可以讓Automake自動添加一些必需的腳本文件。如下所示:
    [root@localhost hello]# automake --add-missing
    configure.ac: installing './install-sh'    //創(chuàng)建install-sh文件
    configure.ac: installing './missing'
    Makefile.am: installing './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: installing './COPYING'
    Makefile.am: installing './depcomp'
    [root@localhost hello]# automake --add-missing //再運行一次,可以輔助生成幾個必要的文件
    Makefile.am: required file './NEWS' not found //沒有找到NEWS文件
    Makefile.am: required file './README' not found
    Makefile.am: required file './AUTHORS' not found
    Makefile.am: required file './ChangeLog' not found
    [root@localhost hello]# touch NEWS    //創(chuàng)建NEWS文件,如果沒有自動生成,手工創(chuàng)建
    [root@localhost hello]# touch README   //創(chuàng)建README文件
    [root@localhost hello]# touch AUTHORS   //創(chuàng)建AUTHORS文件
    [root@localhost hello]# touch ChangeLog   //創(chuàng)建ChangeLog文件
    [root@localhost hello]# automake --add-missing //再運行一次
    [root@localhost hello]# ls      //生成必要的文件
    aclocal.m4      ChangeLog     configure.scan  INSTALL      missing
    AUTHORS         config.h.in   COPYING         install-sh   NEWS
    autom4te.cache  configure     depcomp         Makefile.am  README
    autoscan.log    configure.ac  hello.c         Makefile.in
    [root@localhost hello]# ls configure.in -l
    -rw-r--r--  1 root root 536 Dec 27 04:29 configure.in
    8.配置
    運行自動配置設(shè)置文件configure,把Makefile.in變成最終的Makefile。
    [root@localhost hello]# ./configure    //配置,生成Makefile文件
    ……
    config.status: creating Makefile
    config.status: executing depfiles commands
    [root@localhost hello]# ls
    aclocal.m4      ChangeLog    config.status   COPYING  install-sh   missing
    AUTHORS         config.h     configure       depcomp  Makefile     NEWS
    autom4te.cache  config.h.in  configure.ac    hello.c  Makefile.am  README
    autoscan.log    config.log   configure.scan  INSTALL  Makefile.in  stamp-h1
    [root@localhost hello]# ls  -l  Makefile*
    -rw-r--r--  1 root root 16876 Dec 27 04:51 Makefile
    -rw-r--r--  1 root root    68 Dec 27 04:46 Makefile.am
    -rw-r--r--  1 root root 17180 Dec 27 04:50 Makefile.in
    9.測試
    運行make命令進行編譯,下面的示例中Make的主要編譯命令為"gcc  -g -O2   -o hello  hello.o",此句對應(yīng)本節(jié)前面介紹的手工編輯的Makefile文件內(nèi)容。
    [root@localhost hello]# cd ../hello
    [root@localhost hello]# make     //執(zhí)行make命令
    make  all-am
    ……
    gcc  -g -O2   -o hello  hello.o      //編譯指令
    ……
    編譯成功后,將在當(dāng)前目錄下生成并運行可執(zhí)行程序hello。測試源代碼是否正確:
    [root@localhost hello_2]# ./hello
    hello!GNU
    此方法生成的makefile文件很全面。使用"make install"命令把目標(biāo)文件安裝在系統(tǒng)中。
    [root@localhost hello]# make install      //安裝
    make[1]: Entering directory '/root/book/ch02/ch0206/hello'
    test -z "/usr/local/bin" || mkdir -p -- "/usr/local/bin"
    /usr/bin/install -c 'hello' '/usr/local/bin/hello'   //安裝目標(biāo)文件
    make[1]: Nothing to be done for 'install-data-am'.
    make[1]: Leaving directory '/root/book/ch02/ch0206/hello'
    使用"make uninstall"命令把目標(biāo)文件從系統(tǒng)中卸載。
    [root@localhost hello]# make uninstall      //卸載命令
    rm -f '/usr/local/bin/hello'        //從系統(tǒng)中卸載
    使用"make clean"命令清除編譯時的obj文件。
    [root@localhost hello]# make clean
    test -z "hello" || rm -f hello
    rm -f *.o            //刪除obj文件
    使用"make dist"命令將程序和相關(guān)的文檔打包為一個壓縮文檔以供發(fā)布。
    [root@localhost hello]# make dist
    ……
    [root@localhost hello]# ls         //查看生成的文件
    aclocal.m4      config.h.in    configure.scan    install-sh   README
    AUTHORS         config.h.in~   COPYING           Makefile     stamp-h1
    autom4te.cache  config.log     depcomp           Makefile.am
    Changelog       config.status  hello-1.0.tar.gz  Makefile.in
    ChangeLog       configure      hello.c           missing
    config.h        configure.ac   INSTALL           NEWS
    [root@localhost hello]# ls hello-1.0.tar.gz -l    //打包文件
    -rw-r--r--  1 root root 67699 Dec 27 06:33 hello-1.0.tar.gz

      本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
      轉(zhuǎn)藏 分享 獻花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 特级毛片A级毛片免费观看网站| 国产成人精品亚洲日本在线观看 | 欧美 日韩 亚洲 精品二区 | 亚洲欧美偷国产日韩| 无套后入极品美女少妇| 中文字幕有码日韩精品| 99久久久国产精品免费无卡顿| 国产麻豆成人传媒免费观看| 久久久久久综合网天天| 91中文字幕在线一区| 亚洲欧美综合人成在线| 日本大片免A费观看视频三区| 国产又色又刺激高潮视频| 亚洲 自拍 另类 欧美 综合| 国产AV无码专区亚洲AWWW| 国内丰满熟女出轨VIDEOS| 116美女极品a级毛片| 18禁无遮挡啪啪无码网站破解版| 国产最新进精品视频| 97在线视频免费人妻| 日韩激情一区二区三区| 久久综合九色综合97婷婷| 久久大蕉香蕉免费| 亚洲欧美日韩愉拍自拍美利坚| 亚欧洲乱码视频一二三区| 精品国产乱码久久久久APP下载| 免费av深夜在线观看| 久久99精品久久水蜜桃| 亚洲精品无码永久在线观看你懂的| 色噜噜亚洲男人的天堂| 国产乱理伦片在线观看夜| 久久精品中文闷骚内射| 亚洲成在人线在线播放无码| 亚洲乱码日产精品一二三| 99久久免费只有精品国产| 宅男噜噜噜66网站高清| 成人免费A级毛片无码片2022| 成 人影片免费观看| 欧美性XXXX极品HD欧美风情| 久久久亚洲AV波多野结衣| 亚洲av成人一区在线|