- 執行
autoscan
生成configure.scan - 然后手動修改configure.scan為configure.in 有的平臺為configure.ac
- 修改configure.in 里面的內容。
- 執行
autoheader
生成文件configure.h.in(現在一般改為configure.ac)。configure.in里有宏AC_CONFIG_HEADER()時用 - 運行
libtoolize
生成一些libtool 的文件這些文件跟平臺適應性有關系。 - 運行
autoconf
執行過程中會生成configure 文件 - 手動寫makefile.am
- 執行
automake –a
將makefile.am 生成Makefile.in 同時生成選項可以補齊文件config.guess,config.sub,install-sh,missing,depcomp - 然后執行
./configure && make && make install
一些命令以及文件
- autoscan
autoscan
是用來掃描源代碼目錄生成configure.scan
文件的.autoscan
可以用目錄名做為參數,但如果你不使用參數的話,那么autoscan
將認為使用的是當前目錄.autoscan
將掃描你所指定目錄中的源文件,并創建configure.scan
文件.
- configure.scan
configure.scan
包含了系統配置的 基本選項,里面都是 一些宏定義.我們需要將它改名為configure.in
- aclocal
aclocal
是 一個perl 腳本程序.aclocal
根據configure.in
文件的 內容,自動生成aclocal.m4
文件.aclocal
的定義是 :aclocal -create aclocal.m4 by scanning configure.ac
.
- autoconf
autoconf
是用來產生configure
文件的 .configure
是 一個腳本,它能設置源程序來適應各種不同的操作系統平臺,并且根據不同的 系統來產生合適的Makefile
,從而可以使你的源代碼能在不同的操作系統平臺上被編譯出來.
configure.in
文件的內容是 一些宏,這些宏經過autoconf
處理后會變成檢查系統特性.環境變量.軟件必須的參數的shell腳本.configure.in
文件中的宏的順序并沒有規定,但是你必須在所有宏的最前面和最后面分別加上AC_INIT
宏和AC_OUTPUT
宏.
我們在使用automake
時,實際上還需要用到其他的一些宏,但我們可以用aclocal
來幫我們自動產生.執行aclocal
后我們會得到aclocal.m4
文件.
產生了configure.in
和aclocal.m4
兩個宏文件后,我們就可以使用autoconf
來產生configure
文件了.
- Makefile.am
Makefile.am
是 用來生成Makefile.in
的 ,需要你手工書寫.Makefile.am
中定義了一些內容:
AUTOMAKE_OPTIONS
這個是 automake的 選項.在 執行automake時,它會檢查目錄下是 否存在標準GNU軟件包中應具備的各種文件,例如AUTHORS.ChangeLog.NEWS等文件.我們將其設置成foreign
時,automake
會改用一般軟件包的標準來檢查.
bin_PROGRAMS
這個是 指定我們所要產生的 可執行文件的文件名.如果你要產生多個可執行文件,那么在各個名字間用空格隔開.
helloworld_SOURCES
這個是 指定產生"helloworld"時所需要的 源代碼.如果它用到了多個源文件,那么請使用空格符號將它們隔開.
#比如需要helloworld.h, helloworld.c
helloworld_SOURCES= helloworld.h helloworld.c.
如果你在 bin_PROGRAMS
定義了多個可執行文件,則對應每個可執行文件都要定義相對的filename_SOURCES
Makefile.am例子
AUTOMAKE_OPTIONS = foreign
# 定義包含哪些子目錄
SUBDIRS = avl thread httpp net log timing
# 定義生成的可執行文件
bin_PROGRAMS = icecast
# install時不被導出的頭文件
noinst_HEADERS = admin.h cfgfile.h logging.h sighandler.h connection.h \
global.h util.h slave.h source.h stats.h refbuf.h client.h
# 生成icecast所需要的源文件
icecast_SOURCES = cfgfile.c main.c logging.c sighandler.c connection.c global.c \
util.c slave.c source.c stats.c refbuf.c client.c
# 依賴的庫
icecast_DEPENDENCIES = @ICECAST_OPTIONAL@ net/libicenet.la thread/libicethread.la \
httpp/libicehttpp.la log/libicelog.la avl/libiceavl.la timing/libicetiming.la
icecast_LDADD = $(icecast_DEPENDENCIES) @XIPH_LIBS@ @KATE_LIBS@
AUTOMAKE_OPTIONS = foreign
# 生成不需要install的lib
noinst_LTLIBRARIES = libicethread.la
noinst_HEADERS = thread.h
# lib的源文件
libicethread_la_SOURCES = thread.c
- automake
我們使用automake --add-missing
來產生Makefile.in
.
選項--add-missing的 定義是 "add missing standard files to package",它會讓automake加入一個標準的軟件包所必須的一些文件.
我們用automake
產生出來的Makefile.in
文件是 符合GNU Makefile
慣例的 ,接下來我們只要執行configure
這個shell 腳本就可以產生合適的Makefile
文件了.
- Makefile
在 符合GNU Makefiel慣例的 Makefile中,包含了一些基本的 預先定義的 操作:
make
根據Makefile編譯源代碼,連接,生成目標文件,可執行文件.
make clean
清除上次的 make命令所產生的 object文件(后綴為".o"的 文件)及可執行文件.
make install
將編譯成功的 可執行文件安裝到系統目錄中,一般為/usr/local/bin目錄.
make dist
產生發布軟件包文件(即distribution package).這個命令將會將可執行文件及相關文件打包成一個tar.gz壓縮的文件用來作為發布軟件的 軟件包.它會在當前目錄下生成一個名字類似PACKAGE-VERSION.tar.gz
的 文件.PACKAGE和VERSION,是 我們在 configure.in
中定義的AM_INIT_AUTOMAKE(PACKAGE, VERSION)
.
make distcheck
生成發布軟件包并對其進行測試檢查,以確定發布包的正確性.