autoconf手冊(一)

Autoconf
  Creating Automatic Configuration Scripts
  Edition 2.13, for Autoconf version 2.13
  December 1998
  by David MacKenzie and Ben Elliston
  
  --------------------------------------------------------------------------------
  Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
  
  Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
  
  Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation.
  
  只要版權聲明和本許可聲明保留在全部副本中,您就被受權制做和發行本手冊的原文副本。 中國網管論壇bbs.bitsCN.com
  
  只要整個最終派生工做按照與本手冊相同的許可聲明發行,您就被受權按照與發行原文相同的條件複製和發行本手冊的修改版本。
  
  除了本許可聲明應該使用由基金會批准的譯文以外,您被受權按照與上述修改版本相同的條件複製和發行本手冊的其它語言的譯文。
  --------------------------------------------------------------------------------
  
  本文檔由王立翻譯。 1999.12.16
  
  譯者在此聲明:不對任何由譯文錯誤或者對譯文的誤解承擔任何責任。
  --------------------------------------------------------------------------------
  
  介紹
  A physicist, an engineer, and a computer scientist were
  discussing the nature of God.?Surely a Physicist, said the
  physicist, because early in the Creation, God made Light; and you
  know, Maxwell's equations, the dual nature of electro-magnetic
  waves, the relativist consequences... An Engineer!, said the
  engineer, because before making Light, God split the Chaos into
  Land and Water; it takes a hell of an engineer to handle that big
網管聯盟bitsCN_com
 

  amount of mud, and orderly separation of solids from
  liquids... The computer scientist shouted: And the Chaos,
  where do you think it was coming from, hmm?
  
  ---Anonymous
  
  Autoconf是一個用於生成能夠自動地配置軟件源代碼包以適應多種Unix類系統的 shell腳本的工具。由Autoconf生成的配置腳本在運行的時候與Autoconf是無關的,就是說配置腳本的用戶並不須要擁有Autoconf。
  
  由Autoconf生成的配置腳本在運行的時候不須要用戶的手工干預;一般它們甚至不須要經過給出參數以肯定系統的類型。相反,它們對軟件包可能須要的各類特徵進行獨立的測試。(在每一個測試以前,它們打印一個單行的消息以說明它們正在進行的檢測,以使得用戶不會由於等待腳本執行完畢而焦躁。)所以,它們在混合系統或者從各類常見Unix變種定製而成的系統中工做的很好。沒有必要維護文件以儲存由各個Unix變種、各個發行版本所支持的特徵的列表。
  
  對於每一個使用了Autoconf的軟件包,Autoconf從一個列舉了該軟件包須要的,或者可使用的系統特徵的列表的模板文件中生成配置腳本。在shell代碼識別並響應了一個被列出的系統特徵以後,Autoconf容許多個可能使用(或者須要)該特徵的軟件包共享該特徵。若是後來由於某些緣由須要調整shell代碼,就只要在一個地方進行修改;全部的配置腳本都將被自動地從新生成以使用更新了的代碼。 網管網www_bitscn_com
  
  Metaconfig包在目的上與Autoconf很類似,但它生成的腳本須要用戶的手工干預,在配置一個大的源代碼樹的時候這是十分不方便的。不象Metaconfig腳本,若是在編寫腳本時當心謹慎, Autoconf能夠支持交叉編譯(cross-compiling)。
  
  Autoconf目前還不能完成幾項使軟件包可移植的工做。其中包括爲全部標準的目標自動建立`Makefile'文件,包括在缺乏標準庫函數和頭文件的系統上提供替代品。目前正在爲在未來添加這些特徵而工做。
  
  對於在C程序中的#ifdef中使用的宏的名字,Autoconf施加了一些限制(參見預處理器符號索引)。
  
  Autoconf須要GNU m4以便於生成腳本。它使用了某些UNIX版本的m4 所不支持的特徵。它還會超出包括GNU m4 1.0在內的某些m4版本的內部限制。你必須使用GNU m4的1.1版或者更新的版本。使用1.3版或者更新的版本將比1.1 或1.2版快許多。
  
  關於從版本1中升級的詳情,參見從版本1中升級。關於Autoconf的開發歷史,參見Autoconf的歷史。對與Autoconf有關的常見問題的回答,參見關於Autoconf的問題。
  
  把關於Autoconf的建議和bug報告發送到 bug-gnu-utils@prep.ai.mit.edu。請把你經過運行`autoconf --version'而得到的Autoconf的版本號包括在內。
網管聯盟bitsCN_com
 

  
  建立configure腳本
  由Autoconf生成的配置腳本一般被稱爲configure。在運行的時候,configure 建立一些文件,在這些文件中以適當的值替換配置參數。由configure建立的文件有:
  
  一個或者多個`Makefile'文件,在包的每一個子目錄中都有一個(參見 Makefile中的替換);
  有時建立一個C頭文件,它的名字能夠被配置,該頭文件包含一些#define命令(參見配置頭文件);
  一個名爲`config.status'的shell腳本,在運行時,它將從新建立上述文件。(參見從新建立一個配置);
  一個名爲`config.cache'的shell腳本,它儲存了許多測試的運行結果(參見緩存文件);
  一個名爲`config.log'的文件,它包含了由編譯器生成的許多消息,以便於在configure出現錯誤時進行調試。
  爲了使用Autoconf建立一個configure腳本,你須要編寫一個Autoconf的輸入文件 `configure.in'而且對它運行autoconf。若是你自行編寫了特徵測試以補充 Autoconf所提供的測試,你可能還要編寫一個名爲`aclocal.m4'的文件和一個名爲 `acsite.m4'的文件。若是你使用了包含#define指令的C頭文件,你可能還要編寫`acconfig.h',而且你須要與軟件包一同發佈由Autoconf生成的文件 `config.h.in'。
網管bitscn_com
 
  
  下面是一個說明了在配置中使用的文件是如何生成的圖。運行的程序都標之後綴`*'。可能出現的文件被方括號(`[]')括起來。autoconf和autoheader 還讀取安裝了的Autoconf宏文件(經過讀取`autoconf.m4')。
  
  在準備發佈軟件包的過程當中使用的文件:
  
  你的源文件 --> [autoscan*] --> [configure.scan] --> configure.in
  
  configure.in --.? .------> autoconf* -----> configure
  ??????? +---+
  [aclocal.m4] --+? `---.
  [acsite.m4] ---'??? |
  ??????????? +--> [autoheader*] -> [config.h.in]
  [acconfig.h] ----.?? |
  ???????? +-----'
  [config.h.top] --+
  [config.h.bot] --'
  
  Makefile.in -------------------------------> Makefile.in
  
  在配置軟件包的過程當中使用的文件:
  
  ??????????? .-------------> config.cache
  configure* ------------+-------------> config.log
  ??????????? |
  [config.h.in] -.??? v??????.-> [config.h] -.
網管論壇bbs_bitsCN_com
 
  ??????? +--> config.status* -+??????? +--> make*
  Makefile.in ---'??????????`-> Makefile ---'
  
  編寫`configure.in'
  爲了爲軟件包建立configure腳本,須要編寫一個名爲`configure.in' 的文件,該文件包含了對那些你的軟件包須要或者可使用的系統特徵進行測試的Autoconf宏的調用。現有的Autoconf宏能夠檢測許多特徵; 對於它們的描述能夠參見現有的測試。對於大部分其餘特徵,你可使用Autconf模板宏以建立定製的測試;關於它們的詳情,參見 編寫測試。對於特別古怪或者特殊的特徵,`configure.in' 可能須要包含一些手工編寫的shell命令。程序autoscan能夠爲你編寫`configure.in' 開個好頭(詳情請參見用autoscan建立`configure.in')。
  
  除了少數特殊狀況以外,在`configure.in'中調用Autoconf宏的順序並不重要。在每一個`configure.in'中,必須在進行任何測試之間包含一個對AC_INIT的調用,而且在結尾處包含一個對AC_OUTPUT的調用(參見建立輸出文件)。此外,有些宏要求其餘的宏在它們以前被調用,這是由於它們經過檢查某些變量在前面設定的值以決定做些什麼。這些宏在獨立的說明中給出(參見現有的測試),並且若是沒有按照順序調用宏,在生成configure時會向你發出警告。 網管朋友網www_bitscn_net
  
  爲了提升一致性,下面是調用Autoconf宏的推薦順序。一般,在本列表中靠後的項目依賴於表中靠前的項目。例如,庫函數可能受到typedefs和庫的影響。
  
  AC_INIT(file)
  checks for programs
  checks for libraries
  checks for header files
  checks for typedefs
  checks for structures
  checks for compiler characteris 【轉自 www.bitsCN.com
閱讀(372) | 評論(0) | 轉發(0) |
給主人留下些什麼吧!~~
評論熱議
相關文章
相關標籤/搜索