最近用了一些開源軟體,它們都有統一的安裝方法,非常方便:
./configure於是我也鳥槍換炮,給自己的原始碼用上了automake和autoconf。下面這張流程圖顯示了製作makefile的全過程:make
make install
autoconf工具的作用是檢查工程依賴的庫檔案和標頭檔案,同時也是automake的基礎。
首先用autoscan工具掃瞄原始碼,它會產生乙個configure.scan模板,在此基礎上我們進行修改得到configure.ca(推薦)或者configure.in(圖中是這個),這個檔案是configure的關鍵,裡面記錄了工程依賴的標頭檔案和庫檔案。下面是乙個例子:
# -*- autoconf -*-每個configure.ac都以ac_init開始,以ac_output結束,中間則新增需要檢查的資訊,注意不要輕易改變檢查的順序。其中最重要的幾行都用注釋標註了。現在我們擁有了乙個configure.in,接著用aclocal工具產生aclocal.m4,最後執行autoconf就得到了configure指令碼。# process this file with autoconf to produce a configure script.
ac_prereq([2.68])
ac_init([destor_server], [1.0], [[email protected]])
am_init_automake([destor_server], [1.0]) "如要使用automake,這一句是必須的
# checks for programs.
ac_prog_cc
cflags="-g -o2"
# checks for libraries.
ac_check_lib([pthread],[pthread_create]) "檢查依賴庫檔案,在此新增依賴的庫
ac_check_lib([glib], [g_hash_table_new],[found_glib=yes],[found_glib=no])
if test "$found_glib" = "no"; then
ac_msg_error([*** working glib library not found ***])
fiac_check_lib([crypto],[sha_update],[found_crypto=yes],[found_crypto=no])
if test "$found_crypto" = "no"; then
ac_msg_error([*** working crypto library not found ***])
fiac_prog_ranlib
# checks for header files.
ac_check_headers([arpa/inet.h fcntl.h stdint.h stdlib.h string.h sys/socket.h sys/time.h unistd.h])
ac_check_headers([glib.h]) "檢查依賴的標頭檔案
if test "$found_glib_h" = "no"; then
ac_msg_error([*** working glib.h header not found ***])
fiac_check_headers([openssl/sha.h], [found_sha_h=yes],[found_sha_h=no])
if test "$found_sha_h" = "no"; then
ac_msg_error([*** working sha.h header not found ***])
fi# checks for typedefs, structures, and compiler characteristics.
ac_c_inline
ac_type_int32_t
ac_type_int64_t
ac_type_off_t
ac_type_size_t
ac_type_uint32_t
ac_type_uint64_t
ac_type_uint8_t
# checks for library functions.
ac_func_malloc
ac_output(makefile
src/makefile
src/tools/makefile
src/index/makefile
src/job/makefile
src/storage/makefile) "需要產生makefile的位置
automake工具的輸入包括前文的configure.in和需要我們自己編寫的makefile.am,makefile.am的編寫比makefile要容易多了。下面是個例子。
bin_programs=destor_serverbin_programs表示我們要得到乙個可安裝(make install)的可執行檔案,它會把可執行檔案安裝到指定目錄下;如果不需要安裝,就使用noinst_programs,destor_server是可執行檔名。destor_server_sources表示其依賴的原始碼檔案,因為此目錄下沒有原始碼,我們就空著。destor_server_ldadd表示其依賴的庫檔案,後面都是工程內在各個目錄鏈結得到的庫檔案,每個目錄下都需要乙個makefile.am。subdirs表示執行此makefile前必須先完成這幾個子目錄的makefile。libs是工程依賴的庫。destor_server_sources=
destor_server_ldadd=src/libserver.a src/index/libindex.a src/storage/libstorage.a src/tools/libtools.a src/job/libjob.a
subdirs=src src/index src/job src/storage src/tools
libs=-lpthread -lcrypto -lglib
子目錄內的makefile.am大同小異,這是src目錄的例子:
noinst_libraries=libserver.a其中noinst_libraries表示我們要得到乙個不安裝的庫檔案,libserer.a是它的名字;而libserver_a_sources是其依賴的原始碼檔案。其餘子目錄也都是這種結構,只需調整一下原始碼檔案和庫檔名稱。libserver_a_sources=dedup.c cfl_dedup.c server.c backup_server.c restore_server.c statistic.c jcr.c
建好所有makefile.am後,執行automake --add-missing得到makefile.in模板,configure將會根據這個模板產生最終的makefile。在執行automake之前,要在工程目錄下先建立news、readme、changelog、authors檔案。
大功告成!
GNU autotools 安裝和使用
2.安裝 m4 1.4.11.tar.gz autoconf 2.63.tar.gz automake 1.9.1.tar.gz 3.autotools五工具 4.autotools使用流程 第一步 手工編寫makefile.am這個檔案 第二步 在源 目錄樹的最高層執行autoscan。然後手動修...
學習GNU autotools的好資料
收集一些gnu方面的學習資料方便查詢幫助 gnu autoconf,automake and libtool automake autoconf gnu document 使用autotools生成makefile檔案入門 makefile學習與高階之makefile.am和 m 的意思 gnu a...
使用16進製制顏色值
通常情況下我們是直接使用類似於 ee1289這樣的 來直接表示rgb顏色的 uicolor colorwithred 0xee 255.0 green 0x12 255.0 blue 0x89 255.0 alpha 1 這樣呼叫真是太繁瑣了,所以封裝了乙個小方法來直接呼叫 獲取顏色 uicolor...