新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Linux下C編程基礎之:使用autotools

        Linux下C編程基礎之:使用autotools

        作者: 時間:2013-09-13 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257148.htm

        3.6使用

        在上一小節,讀者已經了解到了make項目管理器的強大功能。的確,makefile可以幫助make完成它的使命,但要承認的是,編寫makefile確實不是一件輕松的事,尤其對于一個較大的項目而言更是如此。那么,有沒有一種輕松的手段生成makefile而同時又能讓用戶享受make的優越性呢?本節要講的系列工具正是為此而設的,它只需用戶輸入簡單的目標文件、依賴文件、文件目錄等就可以輕松地生成makefile了,這無疑是廣大用戶所希望的。另外,這些工具還可以完成系統配置信息的收集,從而可以方便地處理各種移植性的問題。也正是基于此,現在上的軟件開發一般都用來制作makefile,讀者在后面的講述中就會了解到。

        3.6.1autotools使用流程

        正如前面所言,autotools是系列工具,讀者首先要確認系統是否裝了以下工具(可以用which命令進行查看)。

        n aclocal

        n autoscan

        n

        n autoheader

        n automake

        使用autotools主要就是利用各個工具的腳本文件以生成最后的makefile。其總體流程是這樣的。

        n 使用aclocal生成一個“aclocal.m4”文件,該文件主要處理本地的宏定義;

        n 改寫“configure.scan”文件,并將其重命名為“configure.in”,并使用文件生成configure文件。

        接下來,筆者將通過一個簡單的hello.c例子帶領讀者熟悉autotools生成makefile的過程,由于在這過程中會涉及較多的腳本文件,為了更清楚地了解相互之間的關系,強烈建議讀者實際動手操作以體會其整個過程。

        1.autoscan

        它會在給定目錄及其子目錄樹中檢查源文件,若沒有給出目錄,就在當前目錄及其子目錄樹中進行檢查。它會搜索源文件以尋找一般的移植性問題并創建一個文件“configure.scan”,該文件就是接下來要用到的“configure.in”原型。如下所示:

        [root@localhostautomake]#autoscan

        autom4te:configure.ac:nosuchfileordirectory

        autoscan:/usr/bin/autom4tefailedwithexitstatus:1

        [root@localhostautomake]#ls

        autoscan.logconfigure.scanhello.c

        由上述代碼可知autoscan首先會嘗試去讀入“configure.ac”(同configure.in的配置文件)文件,此時還沒有創建該配置文件,于是它會自動生成一個“configure.in”的原型文件“configure.scan”。

        2.autoconf

        configure.in是autoconf的腳本配置文件,它的原型文件“configure.scan”如下所示:

        #-*-Autoconf-*-

        #Processthisfilewithautoconftoproduceaconfigurescript.

        AC_PREREQ(2.59)

        #Thenextoneismodifiedbydavid

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

        AC_INIT(hello,1.0)

        #Thenextoneisaddedbydavid

        AM_INIT_AUTOMAKE(hello,1.0)

        AC_CONFIG_SRCDIR([hello.c])

        AC_CONFIG_HEADER([config.h])

        #Checksforprograms.

        AC_PROG_CC

        #Checksforlibraries.

        #Checksforheaderfiles.

        #Checksfortypedefs,structures,andcompilercharacteristics.

        #Checksforlibraryfunctions.

        AC_CONFIG_FILES([makefile])

        AC_OUTPUT

        下面對這個腳本文件進行解釋。

        n 以“#”號開始的行是注釋。

        n AC_PREREQ宏聲明本文件要求的autoconf版本,如本例使用的版本2.59。

        n AC_INIT宏用來定義軟件的名稱和版本等信息,在本例中省略了BUG-REPORT-ADDRESS,一般為作者的E-mail。

        n AM_INIT_AUTOMAKE是筆者另加的,它是automake所必備的宏,使automake自動生成makefile.in,也同前面一樣,PACKAGE是所要產生軟件套件的名稱,VERSION是版本編號。

        n AC_CONFIG_SRCDIR宏用來檢查所指定的源碼文件是否存在,以及確定源碼目錄的有效性。在此處源碼文件為當前目錄下的hello.c。

        n AC_CONFIG_HEADER宏用于生成config.h文件,以便autoheader使用。

        n AC_CONFIG_FILES宏用于生成相應的makefile文件。

        n 中間的注釋之間可以分別添加用戶測試程序、測試函數庫、測試頭文件等宏定義。

        接下來首先運行aclocal,生成一個“aclocal.m4”文件,該文件主要處理本地的宏定義。如下所示:

        [root@localhostautomake]#aclocal

        再接著運行autoconf,生成“configure”可執行文件。如下所示:

        [root@localhostautomake]#autoconf

        [root@localhostautomake]#ls

        aclocal.m4autom4te.cacheautoscan.logconfigureconfigure.inhello.c

        3.autoheader

        接著使用autoheader命令,它負責生成config.h.in文件。該工具通常會從“acconfig.h”文件中復制用戶附加的符號定義,因為這里沒有附加符號定義,所以不需要創建“acconfig.h”文件。如下所示:

        [root@localhostautomake]#autoheader

        4.automake

        這一步是創建makefile很重要的一步,automake要用的腳本配置文件是makefile.am,用戶需要自己創建相應的文件。之后,automake工具轉換成makefile.in。在該例中,筆者創建的文件為makefile.am,如下所示:

        AUTOMAKE_OPTIONS=foreign

        bin_PROGRAMS=hello

        hello_SOURCES=hello.c

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 瑞金市| 宜都市| 汉川市| 双辽市| 安溪县| 开封市| 明水县| 兴海县| 安徽省| 栾城县| 林甸县| 龙州县| 永平县| 克拉玛依市| 上林县| 遵义县| 临高县| 田林县| 临朐县| 永丰县| 海伦市| 游戏| 民乐县| 丹棱县| 建始县| 望江县| 巢湖市| 甘肃省| 襄城县| 宁武县| 阳朔县| 朝阳区| 聊城市| 河北区| 天长市| 衡阳市| 峨眉山市| 阿巴嘎旗| 谷城县| 肇庆市| 上思县|