Linux下autoconf和automake使用

2021-09-06 07:00:55 字數 2791 閱讀 5714

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。

五、過程圖示

Linux下autoconf和automake使用

1 autoscan autoscan是用來掃瞄源 目錄生成configure.scan檔案的。autoscan可以用目錄名做為引數,但如果你不使用引數的話,那麼autoscan將認為使用的是當前目錄。autoscan將掃瞄你所指定目錄中的原始檔,並建立configure.scan檔案。2 conf...

linux下socket和window下區別

socket相關程式從windows移植到linux下需要注意的 1 標頭檔案 windows下winsock.h winsock2.h linux下sys socket.h 錯誤處理 errno.h 2 初始化 windows下需要用wsastartup linux下不需要 3 關閉socket ...

linux下目錄和許可權

1.1 linux系統中三種基本許可權 檔案許可權的定義 對某個檔案或目錄的訪問控制 訪問限制 檔案的三個屬性 l 使用者的所有者 屬主 當使用者建立乙個檔案,預設這個使用者就是這個檔案的屬主 l 使用者的群組所有者 屬組 使用者的主要組就是這個檔案的屬組 l 其他人 不是以上兩者 例如 ll to...