Linux下automake應(yīng)用
linux 環(huán)境下,當(dāng)項(xiàng)目工程很大的時(shí)候,編譯的過(guò)程很復(fù)雜,所以需要使用 make 工具,自動(dòng)進(jìn)行編譯安裝,但是手寫(xiě) makefile 文件比較復(fù)雜,所幸在 GNU 的計(jì)劃中,設(shè)計(jì)出了一種叫做 Autoconf/Automake 的工具,用來(lái)自動(dòng)生成 makefile 文件,為編譯和安裝程序提供了一個(gè)方便快捷的入口。
Automake 是一種幫助『自動(dòng)』產(chǎn)生 Makefile 文件的軟件,并且讓開(kāi)發(fā)出來(lái)的的軟件可以象 Apache,MySQL 和常見(jiàn)的 GNU 軟件一樣,程序設(shè)計(jì)者只需要寫(xiě)一些預(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)雖然很簡(jiǎn)單,但是妥善運(yùn)用這些規(guī)則就可以變換出許多不同的花樣。卻也因?yàn)檫@樣,許多剛剛開(kāi)始學(xué)習(xí)寫(xiě)Makefile 時(shí)會(huì)覺(jué)得沒(méi)有規(guī)范可以遵循,每個(gè)人寫(xiě)出來(lái)的Makefile都不大一樣,不知道從哪里下手,而且常常會(huì)受到自己的開(kāi)發(fā)環(huán)境的限制,只要環(huán)境參數(shù)不同或者路徑更改,可能 Makefile 就得跟著修改修改。雖然有 GNU Makefile Conventions (GNU Makefile慣例例)訂出一些使用 GNU 程式設(shè)計(jì)時(shí)撰寫(xiě) Makefile 的一些標(biāo)準(zhǔn)和規(guī)范,但是內(nèi)容很長(zhǎng)而且很復(fù)雜,并且經(jīng)常作一些調(diào)整,為了減輕程序開(kāi)發(fā)人員維護(hù)Makefile 的負(fù)擔(dān),因此出現(xiàn)了Automake。
無(wú)論是在 Linux 還是在 Unix 環(huán)境中, make 都是一個(gè)非常重要的編譯命令。不管是自己進(jìn)行項(xiàng)目開(kāi)發(fā)還是安裝應(yīng)用軟件,我們都經(jīng)常要用到 make 或 make install。利用 make 工具,我們可以將大型的開(kāi)發(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)庫(kù)
lib_LTLIBRARIES=libmyfile.la #動(dòng)態(tài)庫(kù)名
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)庫(kù)依賴(lài)文件
libmyfile_la_CPPFLAGS=-I$(top_srcdir)/include #依賴(lài)頭文件路徑
#編譯靜態(tài)庫(kù)
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)庫(kù)文件
??LTLIBRARIES:表示動(dòng)態(tài)庫(kù)文件,前面的 LT 表示 libtool。
??HEADERS:頭文件。
2.6執(zhí)行automake --add-missing生成Makefile.in文件
注意:當(dāng)創(chuàng)建動(dòng)態(tài)庫(kù)時(shí),需要在執(zhí)行 automake --add-missing之前需要執(zhí)行l(wèi)ibtoolize -f -c
若沒(méi)有l(wèi)ibtool工具則在線(xiàn)安裝: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)庫(kù)
??--enable-static ??----編譯生成靜態(tài)庫(kù)
?2.8 編譯安裝make && make install
[wbyq@wbyq shared]$ make && make install
??編譯生成文件信息:

審核編輯:湯梓紅
-
Linux
+關(guān)注
關(guān)注
88文章
11594瀏覽量
217418 -
Makefile
+關(guān)注
關(guān)注
1文章
125瀏覽量
20156
發(fā)布評(píng)論請(qǐng)先 登錄
Linux開(kāi)發(fā)_Linux下進(jìn)程編程
Linux應(yīng)用技術(shù)開(kāi)發(fā)
Linux下的網(wǎng)絡(luò)HOOK實(shí)現(xiàn)
Linux下基于Socket的網(wǎng)絡(luò)編程
Linux下的網(wǎng)絡(luò)編程總結(jié)
Linux下Socket網(wǎng)絡(luò)編程
LINUX系統(tǒng)教程之如何在Linux系統(tǒng)下進(jìn)行編程
Linux下使用autoconf和automake生成Makefile
linux下nodemcu環(huán)境搭建

Linux下automake應(yīng)用
評(píng)論