Linux下automake應用
linux 環境下,當項目工程很大的時候,編譯的過程很復雜,所以需要使用 make 工具,自動進行編譯安裝,但是手寫 makefile 文件比較復雜,所幸在 GNU 的計劃中,設計出了一種叫做 Autoconf/Automake 的工具,用來自動生成 makefile 文件,為編譯和安裝程序提供了一個方便快捷的入口。
Automake 是一種幫助『自動』產生 Makefile 文件的軟件,并且讓開發出來的的軟件可以象 Apache,MySQL 和常見的 GNU 軟件一樣,程序設計者只需要寫一些預先定義好的宏 (macro),提交給Automake處理后會產生一個可以供 Autoconf 使用的 Makefile.in文件。再配合利用 Autoconf產生的自動配置設置文件 configure 即可產生一份符合 GNU Makefile 慣例的 Makeifle 了。
Makefile 基本結構雖然很簡單,但是妥善運用這些規則就可以變換出許多不同的花樣。卻也因為這樣,許多剛剛開始學習寫Makefile 時會覺得沒有規范可以遵循,每個人寫出來的Makefile都不大一樣,不知道從哪里下手,而且常常會受到自己的開發環境的限制,只要環境參數不同或者路徑更改,可能 Makefile 就得跟著修改修改。雖然有 GNU Makefile Conventions (GNU Makefile慣例例)訂出一些使用 GNU 程式設計時撰寫 Makefile 的一些標準和規范,但是內容很長而且很復雜,并且經常作一些調整,為了減輕程序開發人員維護Makefile 的負擔,因此出現了Automake。
無論是在 Linux 還是在 Unix 環境中, make 都是一個非常重要的編譯命令。不管是自己進行項目開發還是安裝應用軟件,我們都經常要用到 make 或 make install。利用 make 工具,我們可以將大型的開發項目分解成為多個更易于管理的模塊,對于一個包括幾百個源文件的應用程序,使用 make 和 makefile 工具就可以輕而易舉的理順各個源文件之間紛繁復雜的相互關系。
?2.Ubuntu下make和automake工具安裝
[wbyq@wbyq shared]$ sudo apt-get install make
[wbyq@wbyq shared]$ sudo apt-get install automake
??注意:automake工具配置生成Makefile文件時會生成連接文件,所以不能在共享路徑去配置生成Makefile文件。
?3.automake構建生成Makefile示例
源碼和目錄結構:
??automake構建生成Makefile流程:
?3.1 執行autoscan命令
??執行autoscan生成configure.scan,將configure.scan重名名為configure.ac,編輯configure.ac文件。
[wbyq@wbyq shared]$ ls
autoscan.log configure.scan include lib main.c src
[wbyq@wbyq work]$ mv configure.scan configure.ac
[wbyq@wbyq work]$ gedit configure.ac #修改文件
?3.2 執行aclocal命令
??執行aclocal生成configure.scan,生成aclocal.m4 文件。
[wbyq@wbyq shared]$ aclocal
ls[wbyq@wbyq shared]$ ls
aclocal.m4 autoscan.log include main.c
autom4te.cache configure.ac lib src
?3.3 執行autoconf生成configure?
[wbyq@wbyq shared]$ autoconf
[wbyq@wbyq shared]$ ls
aclocal.m4 autoscan.log configure.ac lib src
autom4te.cache configure include main.c
3.4 執行autoheader生成config.h.in
[wbyq@wbyq shared]$ autoheader
[wbyq@wbyq shared]$ ls
aclocal.m4 autoscan.log configure include main.c
autom4te.cache config.h.in configure.ac lib src
?2.5 創建Makefile.am文件
??創建Makefile.am文件,編輯Makefile.am。
[wbyq@wbyq shared]$ touch Makefile.am
??Makefile.am文件內容:
AUTOMAKE_OPTIONS=foreign #指定協議規范
bin_PROGRAMS=app #生成的可執行文件
#AUTOMAKE_OPTIONS = subdir-objects
app_SOURCES=main.c $(top_srcdir)/src/my_du.c $(top_srcdir)/src/my_cat.c $(top_srcdir)/src/my_cp.c
AM_CPPFLAGS=-Iinclude #指定頭文件路徑
#編譯動態庫
lib_LTLIBRARIES=libmyfile.la #動態庫名
libmyfile_la_SOURCES=$(top_srcdir)/src/my_du.c $(top_srcdir)/src/my_cat.c $(top_srcdir)/src/my_cp.c #生成動態庫依賴文件
libmyfile_la_CPPFLAGS=-I$(top_srcdir)/include #依賴頭文件路徑
#編譯靜態庫
lib_LIBRARIES=libmyfile.a
libmyfile_a_SOURCES=$(top_srcdir)/src/my_du.c $(top_srcdir)/src/my_cat.c $(top_srcdir)/src/my_cp.c
#打包頭文件
include_HEADERS=$(top_srcdir)/include/*
#實例文件
data_DATA=$(top_srcdir)/main.c
??PROGRAMS:表示可執行文件
??LIBRARIES:表示靜態庫文件
??LTLIBRARIES:表示動態庫文件,前面的 LT 表示 libtool。
??HEADERS:頭文件。
2.6執行automake --add-missing生成Makefile.in文件
注意:當創建動態庫時,需要在執行 automake --add-missing之前需要執行libtoolize -f -c
若沒有libtool工具則在線安裝:sudo apt-get install libtool
[wbyq@wbyq shared]$ libtoolize -f -c
[wbyq@wbyq shared]$ automake --add-missing
?2.7 執行configure生成Makefile
[wbyq@wbyq shared]$ ./configure --prefix=$PWD/_install --enable-shared --enable-static
??--prefix=$PWD/_install ??----指定安裝路徑
??--enable-shared ??----編譯生成動態庫
??--enable-static ??----編譯生成靜態庫
?2.8 編譯安裝make && make install
[wbyq@wbyq shared]$ make && make install
??編譯生成文件信息:
審核編輯:湯梓紅
-
Linux
+關注
關注
87文章
11232瀏覽量
208939 -
Makefile
+關注
關注
1文章
125瀏覽量
19163
發布評論請先 登錄
相關推薦
評論