automake搭建項目工程例子講解

來源:互聯網
上載者:User
automake搭建項目工程例子講解 分類: Automake 2011-02-24 21:18 952人閱讀 評論(0) 收藏 舉報 makefile 工具 指令碼 ubuntu linux cgi

Automake環境的搭建

 

【伺服器環境】 


LINUX版本:Ubuntu 9.10 

 

Automake版本: (GNU automake) 1.11

 

Autoconf版本: (GNU Autoconf) 2.64

 

【介紹】

雖然上面只提到了automake和autoconf工具,但是在實際使用過程中,還需要autoscan,aclocal工具。也就是說我們一共需要用到

autoscan,aclocal,autoconf,automake這幾個工具。在ubuntu中,我們通過apt-get install命令,系統會自動為我們安裝所有工具,不需要手動去下載。在執行完這些命令之後,編譯目錄下才會產生configure檔案,之後我們可以通過熟悉的"./configure","make","make install"命令進行代碼的編譯和安裝。

 

下面是這些工具的一些簡單介紹,網上都有,下面有部分是從網上摘錄,其實剛開始學習automake沒有必要去完全弄清楚這些工具是幹什麼的,可以略過。

 

autoscan是用來掃描原始碼目錄產生configure.scan檔案的。autoscan可以用目錄名做為參數,但如果你不使用參數的話,那麼autoscan將認為使用的是目前的目錄。autoscan將掃描你所指定目錄中的源檔案,並建立configure.scan檔案。configure.scan包含了系統配置的基本選項,裡面都是一些宏定義。我們在實際使用過程中,往往把configure.scan檔案改成configure.in或者configure.ac檔案。 

註:- note: configure.in was the name used for autoconf files, now deprecated.(出自:http://mij.oltrelinux.com/devel/autoconf-automake/)雖然手冊中不推薦改成configure.in,但是我們可以不去理會。

 

aclocal是一個perl 指令碼程式。aclocal根據configure.in檔案的內容,自動產生aclocal.m4檔案。aclocal的定義是:“aclocal - create aclocal.m4 by scanning configure.ac”。 

註:aclocal.m4檔案。當時在學習的時候,非常糾結於這個m4尾碼到底是什麼意思,雖說是個無關痛癢的問題,但是每次看到這個檔案,總會去琢磨這個尾碼到底代表了一個什麼東東。其實非常簡單,m4就是代表macro的意思,也就是說m後面有4個字母,大牛的思維果然和普通人不一致。:)

 

autoconf是用來產生configure檔案的。configure是一個指令碼,它能設定來源程式來適應各種不同的作業系統平台,並且根據不同的系統來產生合適的Makefile,從而可以使你的原始碼能在不同的作業系統平台上被編譯出來。configure.in檔案的內容是一些宏,這些宏經過autoconf 處理後會變成檢查系統特性、環境變數、軟體必須的參數的shell指令碼。configure.in檔案中的宏的順序並沒有規定,但是你必須在所有宏的最前面和最後面分別加上AC_INIT宏和AC_OUTPUT宏。

 

automake用來產生Makefile.in檔案。Those .in files will be used by autoconf scripts to produce the final Makefiles(是用來產生Makefile檔案的,所以是比較重要的檔案)

 

 

總的說來,流程關係圖是這樣的

(轉自http://blog.zquan.me/?tag=aclocal-m4)

 

 只要能把圖看明白,產生makefile也就不會搞不清楚順序了。

 

 

下面的工程目錄,是我建立的一個目錄,我根據這個目錄來講解一下如何搭建編譯工程。

 

【工程目錄】

  

模組注釋:

driver:驅動代碼

software:模組代碼根目錄

               -alarm 警示模組

               -common 公用模組

               -config 配置模組

               -ctrl 主控模組

               -lib 存放編譯好之後的so動態庫

               -lib_source 第三方庫的原始碼

               -ptz 雲台控制模組

               -rtp RTP流媒體模組

               -sdkserver sdk服務模組

               -server 訊息通訊服務模組

               -storage 儲存模組

               -webclient CGI模組

               -xml 存放XML設定檔

 

【執行過程】

步驟1:在software目錄下,使用autoscan掃描目前的目錄(它會自動掃描子目錄,所以你只需要在根目錄下執行一次即可),會在software下面產生configure.scan檔案,如前面說過的,我們需要把configure.scan檔案改名為configure.in,否則無法被其他工具識別

 

1.autoscan

2.mv configure.scan configure.in

 

改名後,我們還需要根據自己的實際情況,對configure.in檔案進行修改。工具的版本不同,產生的configure.in檔案也可能不同,不過我們只需要關注極少部分即可。

 

 

 

註:實際使用過程中,你只需要關注我用紅色箭頭所標識的幾個宏命令就可以了,其他的宏命令還有很多,需要你自己根據實際情況查閱手冊擷取使用方法。 

 

 步驟2.

 在software下面執行aclocal命令,產生aclocal.m4檔案。(若autoscan.in檔案缺少了AC_INIT_AUTOMAKE宏,就無法產生aclocal.m4檔案)

 

步驟3.

在software下面執行autoconf命令,產生configure檔案。

 

註:autoconf 是用來產生自動設定軟體原始碼指令碼(configure)的工具。configure指令碼能獨立於autoconf運行,且在啟動並執行過程中,不需要使用者的幹預,要產生configure,必須用到aclocal.m4。

 

 

步驟4.

configure指令碼已建立,若這時候執行./configure命令,會提示出錯,如下

config.status: error: cannot find input file: `Makefile.in'

 

因為到目前為止,我們還沒有把Makefile.in檔案產生出來,那麼如何產生Makefile.in呢。我們首先需要編寫Makefile.am檔案,看看尾碼名.am,我們就可以知道,這個Makefile.am是給automake工具使用的,通過Makefile.am檔案,我們把Makefile.in產生出來,然後通過./configure命令讀取執行Makefile.in,把makefile產生出來。最後才是我們的"make"和“make install"

 

應該說,automake只要按部就班,依照順序敲幾個命令是非常容易的,唯一麻煩的就是寫Makefile.am檔案,我們需要在每個參與編譯的子目錄下都建立一個Makefile.am檔案。雖說在整個建立流程中,Makefile.am是最繁瑣的一步(考慮到子目錄可能比較多的情況),但是相對比起自己寫每一個makefile檔案,還是要輕鬆許多的。

 

1.我們首先建立software/Makefile.am檔案,怎麼寫呢。

可以看到,我在裡面設了兩個變數,SUBDIRS和AUTOMAKE_OPTIONS.  這兩個是系統內建的變數,類似於這種系統內建的變數後面還會看到。

SUBDIRS變數,顧名思義,就是子目錄的意思,應為software是工程根目錄,所以,我們只需要在這個Makefile.am中指明子目錄有哪些就可以了,在執行過程中,會自動到子目錄下面去尋找對應的Makefile.am,所以說還是相當簡單的。

AUTOMAKE_OPTIONS變數,看圖就知道了,不解釋。

 

2.建立好根目錄下的Makefile.am,那麼子目錄即子模組的Makefile.am又該如何寫呢。一起看。

我選擇software/rtp模組作為講解目錄,它的Makefile.am是這樣寫的。假設RTP模組下面的檔案只有一個stream.cpp,那麼我們就這樣寫,如圖

 

 關於bin_PROGRAMS還要說一點的就是,我們在make install後,產生的bin檔案會把它拷到/usr/local/bin之類的系統目錄下,若你不想拷貝,防止原來的檔案被覆蓋,你可以用noinst_PROGRAMS替換bin_PROGRAMS(noinst即not install的縮寫嘛,你懂得)

 

 

OK,其他目錄的下面的Makefile.am,你都可以參照我上面舉的例子,依樣畫葫蘆,非常簡單。

 

步驟5.

等你逐個的把所有Makefile.am整好後,你就可以在software目錄下執行automake --add-missing命令了,執行完成之後,會在每個目錄下面自動產生Makefile.in檔案。最後執行linux安裝檔案三部曲,"configure","make","make install",你可以隨便執行了。

 

 

 

這裡面所講到知識點,只是涉及到了automake裡面很少的一部分,想要知道更多,建議多看看別人寫的技術文章或者看看官方手冊。

還有一個比較好的方法是,下幾個開源的代碼,自己去琢磨它們的寫法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.