天天看點

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

           大型項目使用automake/autoconf完成編譯配置

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

這麼好的東東當然要拿來用了,但gnu的autotool系列博大精深,工具數量又多,涉及的語言也多,要是自己從頭看到尾,黃花菜都涼了,項目估計早就結束了;上網搜樣例倒是有一大堆,但都是“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,供automake和config.status調用。

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

8.        開源使用者調用configure,生成makefile,然後make && make install。

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

繼續閱讀