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