由於聽過 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 了!)