一,、 automake 的用途 automake 和 autoconf 可以自動生成 GNU 的 Makefile ,,雖然我們也可以手工寫 Makefile ,但是考慮到在多硬件平臺上運行,,編譯環(huán)境差異,,依賴關系,靜態(tài)和動態(tài)庫的生成,,等一系列的問題,,對于復雜的代碼樹,用 automake 工具就成了更好的選擇,。 在下面的例程中,,將介紹樹型源碼包的 Makefile 生成,,其中包括生成庫文件和可執(zhí)行文件。
二,、 完整例程 1. 建立目錄樹 a) 生成目錄樹 $ mkdir lib $ mkdir src $ mkdir include $ touch include/xy.h $ touch lib/xy1.cpp $ touch lib/xy2.cpp $ touch src/main.cpp b) 編輯源代碼文件 i. include/xy.h 內容如下: void xytest1(); void xytest2(); ii. lib/xy1.cpp 內容如下: #include
<stdio.h> { printf(“xytest1/n”); } iii. lib/xy2.cpp 內容如下: #include <stdio.h> void xytest2() { printf(“xytest2/n”); } iv. src/main.cpp 內容如下: #include <xy.h> main() { xytest1(); xytest2(); } 2. autoconf a) 生成默認的 configure.in $ autoscan 此時目錄下生成 configure.scan $ mv configure.scan configure.in b) 編輯 configure.in (為了書寫簡單,,去掉了所有注釋) AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS) AM_INIT_AUTOMAKE(xytest, 1.0) # 此處是軟件名和版本號 AC_PROG_CXX # 自動檢測編譯器 AC_PROG_CC AC_PROG_LIBTOOL # 生成動態(tài)/ 靜態(tài)庫需要LIBTOOL AC_OUTPUT(Makefile lib/Makefile src/Makefile) # 此處是輸出的文件 c) 自動生成 configure $ aclocal 它是一個 perl 腳本,根據(jù) configure.in 產生 aclocal.m4 $ libtoolize –force 它會生成 libtool 所需要的工具,,主要為生成庫做準備 $ autoconf 通過 aclocal.m4 產生 configure 3. automake a) Makefile.am 項層寫法,,編輯 ./Makefile.am 如下 AUTOMAKE_OPTIONS=foreign SUBDIRS = lib src b) Makefile.am 編譯庫文件的寫法,編輯 lib/Makefile.am 如下 DEFAULT_INCLUDES=-I../include lib_LTLIBRARIES = libxy.la libxy_la_SOURCES = xy1.cpp xy2.cpp c) Makefile.am 編譯開執(zhí)行程序的寫法,,編輯 src/Makefile.am 如下 DEFAULT_INCLUDES=-I../include bin_PROGRAMS = main main_SOURCES = main.cpp main_LDADD= -L../lib/.libs/ -lxy d) 生成 Makefile.in $ automake –add-missing 4. 編譯運行(以 arm 為示例) $ ./configure –host=arm-linux 此時機器上需要有 arm-linux-gcc 系統(tǒng)的編譯工具 $ make $ make install 5. 總結 a) 需要手動編譯的只有 configure.in, Makefile.am, 和源代碼三處 i. Makefile.am 中的常用設置項 AM_CXXFLAGS= 編譯 C++ 程序時所帶的 FLAGS AM_CFLAGS= 編譯C 程序時所帶的FLAGS DEFAULT_INCLUDES= 編譯時加入的include 目錄 DEFS= 編譯時定義的DEFIND 值 b) 注意看執(zhí)行過程中有無錯誤提示 |
|
來自: 書劍閣2013 > 《automake》