GNU autotools自動生成Makefile 介紹

1、目的
使用autotools工具來幫助咱們自動地生成符合自由軟件慣例的makefile(這樣就能夠像常見的GNU程序同樣,只要使用「./configure」, 「make」, 「make install」 就能夠把程序安裝到linux系統中去了)
GNU的軟件風格的編譯安裝步驟:
# ./configure 偵測系統的環境,肯定軟件安裝目錄,生成Makefile
(用戶執行configure時能夠經過它的命令行參數指定本身所需的編譯選項
例如:安裝目錄經過--prefix= PREFIX設置,缺省狀況下PREFIX爲/usr/local
默認安裝時,執行文件安裝到/usr/local/bin目錄;
庫安裝到/usr/local/lib目錄;
數據文件安裝到/usr/local/share目錄)
# make 調用系統中的編譯器進行編譯和鏈接
# make install 將軟件安裝到設定的目錄
2、GNU autotools
一、主要包括三個軟件: autoconf ,automake,libtool。
不少linux發行版都會默認安裝這幾個工具,軟件包是經過pkgsrc,他們在pkgsrc目錄爲devel/autoconf,devel/automake,devel/libtool。
二、簡介:configure.ac裏面主要是m4宏,用於偵測系統;Makefile.am裏面主要是編譯相關的設置信息。使用autoconf工具將configure.ac轉換爲configure執行文件,使用automake將Makefile.am轉換爲Makefile.in。執行configure腳本時會讀取Makefile.in裏面的設置信息,並與偵測信息一塊兒寫到Makefile文件中。
(autoscan)->configure.ac->(autoconf)->configure
Makefile.am->(automake)->Makefile.in->(configure)->Makefile
三、命名習慣:
.ac後綴的文件,是autoconf的輸入文件(舊版本中configure.in等同於configure.ac,雖然新版本也
能夠識別,但它不符合命名規則,因此新版本的文件應該使用ac後綴)
.am後綴的文件,是automake的輸入文件
.in後綴的文件,是configure的輸入文件
3、步驟
一、創建目錄,放入文件。按照GNU的習慣,將程序的源碼放入src子目錄,其餘的數據文件也放在各自的子目錄中。
二、autoscan
autoconf軟件包裏的autoscan工具根據參數指定目錄生成一個configure.ac的模板文件configure.scan。autoscan若是不加參數則默認當前目錄爲工做目錄。
三、重命名configure.scan->configure.ac(autoconf的輸入文件),而後在此基礎上進行修改
分析configure.scan文件:
① configure.ac文件是autoconf的輸入文件,通過autoconf處理,展開裏面的m4宏,輸出的是
configure腳本,其主要做用是偵測系統。
② #開始的行爲註釋,其餘都是m4宏命令,宏參數中會使用`[]`來表示其中的字符串是一個總體
AC_PREREQ([2.69]) 聲明本文件要求的autoconf版本
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
定義軟件的名稱和版本等信息,第三項BUG-REPORT-ADDRESS是可選項,通常寫成做者的郵
件地址,此處可修改成AC_INIT(helloworld, 1.0)
AC_CONFIG_SRCDIR 該宏經過偵測所指定的源碼文件是否存在,來肯定源碼目錄的有效性。
能夠選擇源碼目錄中的任何一個文件做爲表明。
AC_CONFIG_HEADER 宏用於生成config.h文件,裏面存放configure腳本偵測到的信息。若是
程序須要使用其中的定義,就在源碼中加入#include <config.h>
⑦ 其餘的一些宏是標準的偵測過程,能夠保留不動。configure.ac文件要求AC_INIT必須放在開頭位
置,AC_OUTPUT放在文件末,中介用來檢測編譯環境的各類宏沒有特別的前後次序要求,由宏之
間相互關係決定Makefile文件的產生。
AC_INIT_AUTOMAKE 簡單的Makefile.in能夠手動編寫,若是使用automake產生,須要在
configure.ac中加入該宏進行聲明
AC_CONFIG_FILES 要輸出Makefile文件,須要在configure.ac中使用該宏進行聲明該宏並不僅
是處理Makefile,而是將FILE.in文件轉換爲FILE文件
**注意:由於makefile能夠遍歷子目錄,若是子目錄中存在Makefile,也將同時處理。例如在src
目錄下是源碼, 其餘目錄下是數據文件的多個子目錄的實例中,可使用單獨一個Makefile放
在根目錄下面,也能夠用多個Makefile。因爲每一個子目錄的Makefile只處理本目錄的文件,分工
明確,是模塊化的方法,推薦使用。所以在configure.ac中增長下面的宏,表示軟件根目錄和子
目錄中都須要生成Makefile文件:
AC_CONFIG_FILES([Makefile
src/Makefile
data/Makefile
docs/Makefile
fonts/Makefile
images/Makefile
music/Makefile
sound/Makefile])
四、編寫Makefile.am文件
① 軟件根(非葉子)目錄Makefile.am:
因爲該目錄下面保存的是與autotools相關的文件,沒有須要編譯安裝的文件,因此只註明須要
進一步處理的子目錄信息:
SUBDIRS = src data docs fonts images music sound
② 文件(葉子)目錄Makefile.am
(具體語法後續再詳細研究)
五、運行autotools
準備好configure.ac和Makefile.am,就能夠用autotools的命令來處理這些文件:
① aclocal命令:它根據configure.ac的定義,將須要使用的m4宏定義複製到aclocal.m4中。缺省
時,m4 宏是從 autoconf 的安裝目錄和系統的aclocal目錄搜索。若是須要使用其餘路徑下的宏,可
以經過命令行的-I選項指定。
② autoheader命令,生成config.h.in文件,這裏面的C語言宏定義也是經過解析configure.ac產生。
③ automake命令,處理Makefile.am,生成Makefile.in
**注意:
a. GNU對本身發佈的軟件有嚴格的規範,好比必須附帶許可證聲明文件COPYING等等,不然
automake執行時會報錯。
b. automake提供了三種軟件等級:foreign,gnu和gnits,讓用戶選擇。默認爲gnu,foreign指
它只檢測必須的文件和有一些必須的腳本文件能夠從automake軟件包裏複製過來。
c. --add-missing選項:將缺失的標準文件添加到包中
④ autoconf命令,生成configure文件
相關文章
相關標籤/搜索