3.3、
autotools工具
3.3.1、介紹
如果要編譯的工程比較大,嘗試
手動去建立、維護
makefile
的話,不僅很複雜,而且費時
費力,還
容易出錯
,這時使用
autotools工具
就是乙個不錯的選擇,
只要輸入
工程中的
目標檔案、依賴檔案、檔案目錄等
資訊就可以
自動生成makefile。
autotools工具
是個系列工具,主要有:
aclocal
、autoscan
、autoconf
、autoheader
、automake。
下面說一下使用流程,如下: ²
在源**目錄樹的最高層執行autoscan
,生成configure.scan檔案;
² 執行aclocal,生成aclocal.m4檔案;
² 執行autoconf,生成configure配置指令碼;
² 執行autoheader
,生成config.h.in檔案;
² 手工編寫makefile.am檔案;
² 執行automake
,生成makefile.in;
² 執行配置指令碼configure,生成makefile。
3.3.2、例項
下面結合乙個例項來說明如何使用
autotools工具
。專案中有檔案:main.c、test1.c、test2.c、test1.h、test2.h。 ²
第一步:執行
autoscan
在終端中輸入「
autoscan
」並回車執行,生成
configure.scan
,該檔案
是configure.in的原型
,而configure.in是autoconf的指令碼配置檔案。所以
在進行下一步工作
之前要對configure.scan進行修改,將其
重新命名為configure.in。configure.scan檔案內容如下:
...ac_prereq([2.64])
ac_init([full-package-name], [version], [bug-report-address])
ac_config_srcdir([
main
.c])
ac_config_headers([config.h])
...ac_output 對
configure.scan的內容
簡要說明如下:
v ac_prereq巨集宣告本檔案要求的autoconf版本。 v
ac_init巨集定義軟體的名稱
、版本等資訊,
其中bug-report-address可以省略。 v
ac_config_srcdir巨集用來偵測指定的檔案是否存在,來確定原始碼目錄的有效性。 v
ac_config_header巨集用於生成config.h檔案,以便autoheader使用。
修改方法如下: v
填寫ac_init
巨集要定義的內容。 v
新增巨集am_init_automake
,及定義的內容。 v
新增ac_config_files([makefile])。
v 在修改好
configure.scan檔案
後,把其改名為
configure.
in。
這樣得到的
configure.
in檔案內容如下:
...ac_prereq([2.64])
ac_init(
, 1.0, [email protected])
#修改的巨集
am_init_automake
, 1.0
) #新增的巨集
ac_config_srcdir([
main
.c]) a
m_config_headers([config.h])
...ac_config_files([makefile])
#新增的巨集
ac_output ²
第二步:執行
aclocal
在終端中輸入「
aclocal
」並回車執行。該命令
根據configure.
in的內容生成aclocal.m4檔案
,該檔案主要處理本地的巨集定義。
² 第三步:
執行autoconf
在終端中輸入「
autoconf
」並回車執行。該命令
根據configure.
in和aclocal.m4的內容生成configure配置指令碼
,configure
指令碼是用來生成
makefile的。 ²
第四步:
執行autoheader
在終端中輸入「
autoheader
」並回車執行。該命令用來
生成config.h.in檔案。通常
是會從「acconfig.h
」檔案中複製使用者附加的符號定義
。因為本例中沒有附加的符號定義
,所以不需要建立」acconfig.h」檔案。
² 第五步:編寫
makefile.am
automake需要指令碼配置檔案makefile.am,這個檔案
得手工建立。
內容如下: 1
automake_options=foreign 2
bin_programs=
_sources=main.c
test1
.c test1
.h test2
.c test2.h
簡單說明:
第一行中
automake_options
用來設定automake的選項。
gnu對自己發布的軟體有嚴格的規範,比如必須附帶許可證宣告檔案copying等等,否則automake執行時會報錯。
automake提供了3種軟體等級:foreign、gnu
和gnits
。預設等級是gnu。
示例中使用的
是foreign
,表示只檢測必要的檔案。
第二行中
bin_programs定義了要產生的執行檔名。如果產生多個可執行檔案,每個檔名
要用空格隔開。
第三行中
file_sources定義file這個執行程式的依賴檔案
,其中「
file_sources
」中的前部分「
file
」要改寫成可執行檔名,即與
bin_programs
定義的名稱一直
。如果有多個可
執行檔案,那就要定義相應的file_sources。 ²
第六步:執行
automake
這一步很重要,automake處理
指令碼配置檔案makefile.am
後,生成makefile.in。有一些必需的指令碼檔案,如「install-sh」、「missing」等,可以從automake軟體包裡複製過來,只需在執行時使用「--add-missing」選項即可。預設的處理方式是建立這些檔案的符號鏈結,如果再加上「--copy」選項則可以使用複製方式。執行的命令格式如下: #
automake
--add-missing --copy ²
第七步:執行
configure
在終端中輸入「
./configure
」並回車執行,就是執行第三步生成的
configure
配置指令碼,該指令碼根據第四步生成的config.h.in和第六步生成的makefile.in的內容來生成
makefile檔案。
AutoTools工具的使用
最近一直在看linux下autotools工具的使用方法,查閱了一些資料,感覺入門級別的文章網上寫的很多,但寫的清楚明白的應該是下面這篇。a brief introduction to autoconf 而完整詳細,寫的特別棒的是這本書 autoconf,automake and libtool 各...
autotools工具使用記錄
參考 安裝順序 m4 autoconf automake 參考的博文說這個順序很重要,剛開始很納悶,後來在安裝的過程中,發現之間是有依賴關係的 安裝方法 configure make make install 使用方法 autotool工具使用到的工具有 aclocal autoscan autoc...
autotools使用流程
1 autoscan root localhost automake autoscan 它會在給定目錄及其子目錄樹中檢查原始檔,若沒有給出目錄,就在當前目錄及其子目 錄樹中進行檢查。它會搜尋原始檔以尋找一般的移植性問題並建立乙個檔案 configure.scan 該檔案就是接下來autoconf要用...