Automake 如何把簡單的事情變複雜

 

由於聽過 automake 這個東西, 也看見它到處肆虐, 卻不知道怎麼玩? 所以就找了資料來試試看. 一試之下, 才發現這是個把簡單的事情變難的方法 ! 當然, 網路有教人家怎麼玩? 不過可千萬別信他們的, 可以輕輕鬆鬆產生 makefile. 以下就是我悲慘的遭遇.

 

首先要安裝好 cygwin, 這個大家都會, 不成問題. 後面就一步一步來囉  :

 

source code 的目錄底下, 執行 autoscan, 一般來說執行的是 /usr/bin/autoscan, which 指令就可以確認 .這時會產生一個 configure.scan 的檔案.

 

喔喔, 光是長相就和網路上長得不一樣了. 一定是 autoscan 版本的問題. AC_INIT 變成 3 個參數, AM_INIT_AUTOMAKE 卻不見了 .

 

無可奈何之下, 只好把前幾行改成這樣  :

 

因為它會生出一個 config.h 把我的 config.h 蓋過去!

 

此時會出現一些 configure.ac 的錯誤訊息, 不過不用管它. 那是因為舊的中間檔案在作祟吧!?

 

configure.scan copy confiqure.in . 做下一步的準備 .

 

執行 autoconf, 結果會得到 configure . 它會參考剛才的 configure.in . 這個檔案大約是幾百   KB.

 

執行 aclocal, 此時應該要產生 aclocal.m4, 不過實際上它是抱怨連連. 如何看到這一句     : Can't locate object method "path" via package "Autom4te::Request" at /usr/autotool/devel/bin/autom4te line 81.

 

那就執行一下 rm -r autom4te.cache, 後面一律比照辦理 .為了避免大家過於投入 debug 的細節, 我就只講對的做法吧 

 

!中間還要加入 AC_PROG_LIBTOOL 這一行, 不然後面過不了

 

.此時執行 libtoolize –force, 若沒有執行 libtoolize, 待會兒 automake 會找不到   ltmain.sh.接著執行 autoheader, 它會產生 config.h.in. 沒有這個 automake 會抱怨   .現在再做一次 aclocal 就平安無事了. alocal.m4 這個檔案也幾百 KB.

 

此時有個抱怨: You should add the contents of `/usr/share/aclocal/libtool.m4' to `aclocal.m4', 但據說不用理它 !

 

現在人工又要介入了, 我們得寫一個 makefile.am 的檔案, 裡面放這些東西  :

 

b.c 中間用空隔分開.

 

此時可以執行 automake -a . 當然它還會再抱怨, 包括叫我用 2.59 . 天啊! 我不就是 2.59 版嗎? 因此我回去把 configure.in 的第一行改成 2.57, 重跑第 N   .生出 configure 檔了!

 

什麼? 還不是 Makefile? 只好 run ./configure 再跑個半天   .終於等到 Makefile , 好久啊! 太恐佈了   !!

 

打下去! 程式的 bug 出來了, 終於可以 debug 了 .

 

為了避免大家不知道我說了什麼? 看看我這個醜不拉幾的 a.rc   !    (倒站後找不到 code 了!)