autoconf使用

轉自:http://www.cnblogs.com/itech/archive/2010/11/28/1890220.html

Hello world,this is the autoconf usage
1.
use the command autoscan to produce two file named configure.scan and autosacn.log then rename the file of configure.scan for configure.in
2.
execute command acclocal and autoconf will produce acloacl.m4 and configure files
3.
create a file named Makefile.am and add following context:

AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello
hello_SOURCES=hello.c

4.
execute the command automake --add-missing will produce the Makefile.in
5.
execute ./configure will produce the Makefile

1、 autoscan
  autoscan是用來掃描源代碼目錄生成configure.scan文件的。autoscan可以用目錄名做爲參數,但如果你不使用參數的話,那麼autoscan將認爲使用的是當前目錄。autoscan將掃描你所指定目錄中的源文件,並創建configure.scan文件。
  
2、 configure.scan
  configure.scan包含了系統配置的基本選項,裏面都是一些宏定義。我們需要將它改名爲configure.in

3、 aclocal
  aclocal是一個perl 腳本程序。aclocal根據configure.in文件的內容,自動生成aclocal.m4文件。aclocal的定義是:“aclocal - create aclocal.m4 by scanning configure.ac”。

4、 autoconf
  使用autoconf,根據configure.in和aclocal.m4來產生configure文件。configure是一個腳本,它能設置源程序來適應各種不同的操作系統平臺,並且根據不同的系統來產生合適的Makefile,從而可以使你的源代碼能在不同的操作系統平臺上被編譯出來。
  configure.in文件的內容是一些宏,這些宏經過autoconf 處理後會變成檢查系統特性、環境變量、軟件必須的參數的shell腳本。configure.in文件中的宏的順序並沒有規定,但是你必須在所有宏的最前面和最後面分別加上AC_INIT宏和AC_OUTPUT宏。
  在configure.ini中:
  #號表示註釋,這個宏後面的內容將被忽略。
  AC_INIT(FILE) 這個宏用來檢查源代碼所在的路徑。
  AM_INIT_AUTOMAKE(PACKAGE, VERSION) 這個宏是必須的,它描述了我們將要生成的軟件包的名字及其版本號:PACKAGE是軟件包的名字,VERSION是版本號。當你使用make dist命令時,它會給你生成一個類似helloworld-1.0.tar.gz的軟件發行包,其中就有對應的軟件包的名字和版本號。
  AC_PROG_CC  這個宏將檢查系統所用的C編譯器。
  AC_OUTPUT(FILE)  這個宏是我們要輸出的Makefile的名字。
  我們在使用automake時,實際上還需要用到其他的一些宏,但我們可以用aclocal 來幫我們自動產生。執行aclocal後我們會得到aclocal.m4文件。
  產生了configure.in和aclocal.m4 兩個宏文件後,我們就可以使用autoconf來產生configure文件了。

5、 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。

6、 automake
  我們使用automake,根據configure.in和Makefile.am來產生Makefile.in。
  選項–add-missing的定義是“add missing standard files to package”,它會讓automake加入一個標準的軟件包所必須的一些文件。
  我們用automake產生出來的Makefile.in文件是符合GNU Makefile慣例的,接下來我們只要執行configure這個shell 腳本就可以產生合適的 Makefile 文件了。

7、 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  生成發佈軟件包並對其進行測試檢查,以確定發佈包的正確性。這個操作將自動把壓縮包文件解開,然後執行configure命令,並且執行make,來確認編譯不出現錯誤,最後提示你軟件包已經準備好,可以發佈了。
  make distclean  類似make clean,但同時也將configure生成的文件全部刪除掉,包括Makefile。
  
  這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章