閱讀555 返回首頁    go 阿裏雲 go 技術社區[雲棲]


大型項目使用Automake/Autoconf完成編譯配置(1)——提綱挈領

           大型項目使用Automake/Autoconf完成編譯配置

使用過開源C/C++項目的同學們都知道,標準的編譯過程已經變成了簡單的三部曲:configure/make/make install, 使用起來很方便,不像平時自己寫代碼,要手寫一堆複雜的Makefile,而且換個編譯環境,Makefile還需要修改(Eclipse也是這樣)。

 

這麼好的東東當然要拿來用了,但GNUAutotool係列博大精深,工具數量又多,涉及的語言也多,要是自己從頭看到尾,黃花菜都涼了,項目估計早就結束了;上網搜樣例倒是有一大堆,但都是“hello world”的樣例,離真正完成大型項目的目標還差得遠。

 

沒有辦法,對照網上的樣例,再找幾個開源的源碼,然後參考各種Autotools的手冊,花了2天時間,終於完成了一個基本可用的Autotools。為了避免其他XDJM也浪費時間,因此將過程總結下來,就算是新年禮物,送給大家!!

 

提綱挈領:使用Autotools其實很簡單

大家不要看到那麼多工具,其實使用起來很簡單,總結起來就是兩部分:

1) 按照順序調用各個工具;

2)修改或者添加3個文件;

聽到我這麼講,大家是否覺得有信心了?好的,下麵我們來看具體如何操作:

1.         源碼根目錄調用autoscan腳本,生成configure.scan文件,然後將此文件重命名為configure.ac(configure.in,早期使用.in後綴)

2.         【修改】configure.ac,利用autoconf提供的各種M4宏,配置項目需要的各種自動化探測項目

3.         調用aclocal收集configure.ac中用到的各種非Autoconf的宏,包括【自定義宏】

4.         調用autoheader,掃描configure.ac(configure.in)acconfig.h(如果存在),生成config.h.in宏定義文件,裏麵主要是根據configure.ac中某些特定宏(AC_DEFINE)生成的#define#undefine宏,configure在將根據實際的探測結果決定這些宏是否定義(具體見後麵例子)。

5.         按照automake規定的規則和項目的目錄結構,【編寫】一個或多個Makefile.am(Makefile.am數目和存放位置和源碼目錄結構相關)Makefile.am主要寫的就是編譯的目標及其源碼組成。

6.         調用automake,將每個Makefile.am轉化成Makefile.in,同時生成滿足GNU編碼規範的一係列文件(帶-a選項自動添加缺少的文件,但有幾個仍需要自己添加,在執行automake前需執行touch NEWS README AUTHORS ChangeLog)。如果configure.ac配置了使用libtool(定義了AC_PROG_LIBTOOL宏(老版本)或LT_INIT),需要在此步驟前先在項目根目錄執行libtoolize --automake --copy --force,以生成ltmain.sh,供automakeconfig.status調用。

7.         調用autoconf,利用M4解析configure.ac,生成shell腳本configure。以上幾步完成後,開發者的工作就算完成了,後麵的定製就由開源軟件的用戶根據需要給configure輸入不同的參數來完成。

8.        開源用戶調用configure,生成Makefile,然後make && make install

整個過程步驟有8步,但其中有5步你隻需要簡單的敲一個命令即可,隻有剩下的三步需要你動手寫一些東西,對應上麵步驟中的藍色黑體字部分,下一篇博文將重點講述如何在大型項目中完成這三歩。

最後更新:2017-04-02 06:51:36

  上一篇:go fopen fclose 函數練習
  下一篇:go javascript:驗證郵箱、電話、QQ的正則表達式