Autobook中文版 (六)-- 8. Bootstrapping

 有很多使用autotools的程序,每個有複雜的輸入集合。輸入文件發生改變時,用適當的順序運行適當的程序是重要的。不幸的是同時記住依賴關係和順序是困難的。

 
例如,無論你任何時候編輯configure.in,你必須重新運行aclocal,即使是你加一個引用到一個新宏。你也必須通過運行autoconf重建configure;config.h通過運行autoheader重建,即使你加一個新的AC_DEFINE;或者automake增加一個新的AC_SUBSTs到makefile.in的變量。如果你編輯一個makefile.am文件,你必須重新運行automake。在這兩種情況下,你必須重新運行config.status,如果configure被改變,需要重新檢查,然後運行config.status重新創建makefile。
 
用創建系統開發你的項目的時候,依賴關係很快變得令人煩惱。當然,automake知道怎樣自動地處理這些。一般,automake產生一個makefile.in文件,這個文件定義了各部分的依賴關係,並以適當的順序自動運行各種必要的工具。這一切都假設所用到的工具的版本都是正確的。
 
autotool程序有一個腳本準備做這些,你生成一個makefle之前或你從代碼庫獲取新的代碼時,它將用正確的順序自動地運行各種工具。對於怎樣做這個,至少有兩種方法-autogen.sh和bootstrap:
 
autogen.sh  
   從開始,這就是一個不好的名字對於bootstrap腳本,因爲GNU已經有一個自動的文本生成工具叫AutoGen.bootstrap運行過後,通常安裝包會有腳本自動運行生成configure腳本,以autogen.sh作爲參數傳遞給configure。除非你不知道你想要什麼選項,直到configure腳本生成爲止,你不能運行configure --help。如果你發現自己編譯的項目用這種方式建立,我建議你輸入:
$ /bin/sh ./autogen.sh --help
忽略假的warning提示,那只是告訴你conigure將被執行。
bootstrap
    越來越多地,許多項目通過調用它們的bootstrap腳本啓動。啓動腳本簡單地運行各種各樣的必須的命令,使源代碼處於可安裝的狀態,最終用戶能簡單地運行:
$ configure
    $ make
    $ make install
不幸的是很多人沒有在他們的發佈包裏放置bootstrap腳本。因此除了開發者機器的創建環境發生改變的時候,這個腳本不是必須的。這意味着autogen.sh的使用者可能從來沒有看到其他方法的優點。
Autoconf帶有一個和bootstrap腳本具有同樣功能的程序叫做autoreconf。因爲autoreconf很少被使用,從來也不有名,僅僅在autoconf2.13版本里和automake一起使用。甚至autoconf2.13版本的autoreconf也不處理動態庫和automake相關的選項。
 
直到autoreconf出現之前,我們推薦bootstrap方法。在寫這本書的時候,我們所使用的bootstrap是一個還沒有被標準化的版本:
     #! /bin/sh
 
     aclocal \
     && automake --gnu --add-missing \
     && autoconf
在這裏我們不使用autoreconf,因爲它不能處理我們想要的`--add-missing'選項。一個典型的bootstrap可能也運行libtoolize或者autoheader。
 
所有工具的版本的正確性對於開發者來說是很重要的,這樣能夠避免由於版本疏忽導致的許多問題。在工作中版本不一致是很值得注意的問題。因此automake默認地提供了一個機制避免這些問題,當開發者知道他們的環境是正確設置的時候,用戶可以激活它們。
 
爲了能夠使用這個方法,你首先必須添加AM_MAINTAINER_MODE到`configure.in'.這將添加`--enable-maintainer-mode'選項到configure;當指定這個選項的時候將導致“維護者規則”被激活。
 
注意,維護者方式是一個有爭議的屬性。有些人喜歡使用它是因爲在某些情況下它導致較少的錯誤報告。例如,cvs不保存文件的相對時間戳。如果你的項目同時有configure.in和configure兩個文件,而且沒有使用維護者模式,那麼有時make將需要重新生成configure,即使這不是必須的。這會給開發者帶來更多的麻煩--在一個大的項目裏,有很多開發者不想接觸configure.in,甚至很多人不想安裝GNU Autotools.
 
還有一些人認爲最終用戶應該使用和開發者一樣的創建系統,維護者模式是不推薦的,而且維護者模式是不安全的--你很容易地忘記自己使用的是什麼,忘記重建,忽略正確的測試,一個改變或者重建系統。在非維護者模式下,使用一個不存在的維護者工具時automake的missing腳本將會發出一個警告給用戶。
 
你採用的方法取決於項目的參與者的情況。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章