日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux下Makefile的automake生成全攻略

文/余濤

作為Linux下的程序開發(fā)人員,大家一定都遇到過Makefile,用make命令來編譯自己寫的程序確實是很方便 。一般情況下,大家都是手工寫一個簡單Makefile,如果要想寫出一個符合自由軟件慣例的Makefile就不那么容易了 。
在本文中,將給大家介紹如何使用autoconf和automake兩個工具來幫助我們自動地生成符合自由軟件慣例的Makefile,這樣就可以象常見的GNU程序一樣,只要使用“./configure”,“make”,“make instal”就可以把程序安裝到Linux系統(tǒng)中去了 。這將特別適合想做開放源代碼軟件的程序開發(fā)人員,又或如果你只是自己寫些小的Toy程序,那么這個文章對你也會有很大的幫助 。
一、Makefile介紹
Makefile是用于自動編譯和鏈接的,一個工程有很多文件組成,每一個文件的改變都會導致工程的重新鏈接,但是不是所有的文件都需要重新編譯,Makefile中紀錄有文件的信息,在make時會決定在鏈接的時候需要重新編譯哪些文件 。
Makefile的宗旨就是:讓編譯器知道要編譯一個文件需要依賴其他的哪些文件 。當那些依賴文件有了改變,編譯器會自動的發(fā)現(xiàn)最終的生成文件已經(jīng)過時,而重新編譯相應的模塊 。
Makefile的基本結構不是很復雜,但當一個程序開發(fā)人員開始寫Makefile時,經(jīng)常會懷疑自己寫的是否符合慣例,而且自己寫的Makefile經(jīng)常和自己的開發(fā)環(huán)境相關聯(lián),當系統(tǒng)環(huán)境變量或路徑發(fā)生了變化后,Makefile可能還要跟著修改 。這樣就造成了手工書寫Makefile的諸多問題,automake恰好能很好地幫助我們解決這些問題 。
使用automake,程序開發(fā)人員只需要寫一些簡單的含有預定義宏的文件,由autoconf根據(jù)一個宏文件生成configure,由automake根據(jù)另一個宏文件生成Makefile.in,再使用configure依據(jù)Makefile.in來生成一個符合慣例的Makefile 。下面我們將詳細介紹Makefile的automake生成方法 。
二、使用的環(huán)境
本文所提到的程序是基于Linux發(fā)行版本:Fedora Core release 1,它包含了我們要用到的autoconf,automake 。
三、從helloworld入手
我們從大家最常使用的例子程序helloworld開始 。
下面的過程如果簡單地說來就是:
新建三個文件:
 helloworld.c
 configure.in
 Makefile.am
然后執(zhí)行:
aclocal; autoconf; automake --add-missing; ./configure; make; ./helloworld
就可以看到Makefile被產(chǎn)生出來,而且可以將helloworld.c編譯通過 。
很簡單吧,幾條命令就可以做出一個符合慣例的Makefile,感覺如何呀 。
現(xiàn)在開始介紹詳細的過程:
1、建目錄
在你的工作目錄下建一個helloworld目錄,我們用它來存放helloworld程序及相關文件,如在/home/my/build下:
$ mkdir helloword
$ cd helloworld
2、 helloworld.c
然后用你自己最喜歡的編輯器寫一個hellowrold.c文件,如命令:vi helloworld.c 。使用下面的代碼作為helloworld.c的內(nèi)容 。
int main(int argc, char** argv)
{
printf("Hello, Linux World!n");
return 0;
}
完成后保存退出 。
現(xiàn)在在helloworld目錄下就應該有一個你自己寫的helloworld.c了 。
3、生成configure
我們使用autoscan命令來幫助我們根據(jù)目錄下的源代碼生成一個configure.in的模板文件 。
命令:
$ autoscan
$ ls
configure.scan helloworld.c
執(zhí)行后在hellowrold目錄下會生成一個文件:configure.scan,我們可以拿它作為configure.in的藍本 。
現(xiàn)在將configure.scan改名為configure.in,并且編輯它,按下面的內(nèi)容修改,去掉無關的語句:
============================configure.in內(nèi)容開始=========================================
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

推薦閱讀