熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

autoconf手冊(七)

2022-06-13   來源: Oracle 

  獲取規范的系統類型
  下列的宏使得configure腳本可以獲得系統類型它們運行shell腳本configguess以確定用戶在命令行中沒有給出的它們需要的關於主機目標和創建類型的所有值它們運行configsub對用戶給出的任何別名進行規范化如果你使用這些宏你必須把這兩個shell腳本與你的源代碼一同發布關於 AC_CONFIG_AUX_DIR的信息你可以通過該宏設置configure查找這些腳本的目錄請參見 創建輸出文件如果你沒有使用這些宏中的任意一個configure 就忽略任何傳遞給它的`host`target和`build選項
  宏 AC_CANONICAL_SYSTEM
  檢測系統類型並把輸出變量設置成規范的系統類型關於該宏設置變量的細節參見系統類型變量
  宏 AC_CANONICAL_HOST
  只執行AC_CANONICAL_SYSTEM中關於主機類型功能的子集對於不是編譯工具鏈(compiler toolchain)一部分的程序這就是所需要的全部功能
  宏 AC_VALIDATE_CACHED_SYSTEM_TUPLE (cmd)
  如果緩存文件與當前主機目標和創建系統類型不一致就執行cmd或者打印一個缺省的錯誤消息
  
  系統類型變量
  在調用了AC_CANONICAL_SYSTEM之後下列輸出變量包含了系統類型信息在調用了AC_CANONICAL_HOST 之後只設置了下列host變量
  buildhosttarget
  
  規范系統名稱
  build_aliashost_aliastarget_alias
  如果使用了configguess就是用戶指定的名稱或者規范名稱
  build_cpubuild_vendorbuild_os
  host_cpuhost_vendorhost_os
  target_cputarget_vendortarget_os
  為方便而提供的規范名稱的獨立部分
  使用系統類型
  你將如何使用規范的系統類型?通常你在`configurein中的一個或多個case語句中使用它來選擇系統特定的C文件而後把那些使用基於系統名的文件名的文件連接到諸如`hosth或`targetc的普通的文件上case語句模型允許使用shell通配符對多種情況進行編組就像下面的片斷
  
  case $target in
  i*mach* | i*gnu*) obj_format=aout emulation=mach bfd_gas=yes ;;
  i*bout) obj_format=bout ;;
  esac
  宏 AC_LINK_FILES (sourcedest)
  使得AC_OUTPUT把每個存在文件的source連接到對應連接名dest如果可能創建一個符號連接否則就創建硬連接dest和source應該是相對於頂層源代碼目錄或者創建目錄的相對路徑可以多次調用本宏
  
  例如下列調用
  AC_LINK_FILES(config/${machine}h config/${obj_format}hhosth objecth)
  
  在當前目錄中創建`hosth它是一個到`srcdir/config/${machine}h的連接並且創建`objecth它是一個到`srcdir/config/${obj_format}h的連接
  你還可以使用主機系統類型以尋找交叉編譯工具關於完成該任務的宏AC_CHECK_TOOL的信息參見對普通程序和文件的檢查
  
  站點配置
  configure腳本支持幾種本地配置決策方式它們是用戶指明外部軟件的位置包括或除去可選的特征以修改過的名稱安裝的程序以及為configure選項設置缺省值的手段
  
  與外部軟件一起工作
  有些軟件包需要或者可選地使用其它已經安裝的軟件包用戶可以把命令行選項傳遞給configure 以指明使用那個外部軟件選項采用下列形式之一
  withpackage[=arg]
  withoutpackage
  例如`withgnuld的意思是使用GNU連接器而不是任何其它連接器`withx的意思是使用X Window系統
  
  用戶可以給出包名加`=加參數的命令行參數`no是關於包的缺省參數它表示不使用包既不是`yes又不是`no的參數將包含其它包的名字或者版本號以便更精確地指定本程序可以與之協同工作的包如果沒有給出參數`withoutpackage的缺省參數為`yes `withoutpackage等價於`withpackage=no
  
  configure腳本並不對它們不支持的`withpackage選項發出警告本特征允許頂層目錄中的configure腳本配置一個包含多個包的源代碼樹在包支持不同的選項的時候不會因為給出了只有一部分包支持的選項而導致不必要的錯誤消息一個不幸的副作用是選項的拼寫錯誤就不能被檢查出來了迄今為止還沒有處理該問題的更好辦法
  
  對於每個可能使用的外部軟件包`configurein都應該調用AC_ARG_WITH以檢測 configure的用戶是否要求使用它確定在缺省狀態下是使用還是不使用每個包以及那個參數是合法的是你的任務
  宏 AC_ARG_WITH (packagehelpstring [actionifgiven [actionifnotgiven]])
  如果用戶以選項`withpackage或者`withoutpackage調用 configure就運行shell命令actionifgiven如果兩個選項都沒有給出就運行shell命令 actionifnotgiven名字package給出了本程序應該與之協同工作的其它軟件包它應該僅僅由字母數字和破折號(dashes)組成
  
  shell命令actionifgiven可以通過shell變量withval得到選項的參數該變量的值實際上就是把 shell變量with_package的值中的所有`字符替換為`_而得的如果你願意可以使用變量with_package
  
  參數helpstring是對選項的描述它看起來應該像
  
  withreadlinesupport fancy command line editing
  
  如果需要給出更多的細節helpstring可能多於一行只要確保`configure help中的列的排列就可以了不要在求助字符串中使用tab你將需要用`[和`]包圍它以生成前導空格
  
  宏 AC_WITH (packageactionifgiven [actionifnotgiven])
  這是不支持求助字符串的AC_ARG_WITH的過時版本
  
  選擇包選項
  如果軟件包含有可選的編譯時(compiletime)特征用戶就可以在調用configure時使用命令行選項來指明是否編譯它們選項采用如下形式之一
  
  enablefeature[=arg]
  disablefeature
  
  這些選項允許用戶選擇可選的選項進行創建和安裝`enablefeature選項永遠不要使特征的行為變得不同或者導致一個特征代替另一個特征它們只應該導致程序的一部分被創建而另一部分不創建
  
  用戶可以通過在特征名之後添加`=和參數來給出參數給出參數`no表示 不能使用該特征一個帶有參數的特征看起來就像`enabledebug=stabs如果沒有給出參數它的缺省值就是`yes`disablefeature等價於 `enablefeature=no
  
  configure腳本並不對它們所不支持的`enablefeature選項發出警告本特征允許頂層目錄中的configure腳本配置一個包含多個包的源代碼樹在包支持不同的選項的時候不會因為給出了只有一部分包支持的選項而導致不必要的錯誤消息一個不幸的副作用是選項的拼寫錯誤就不能被檢查出來了迄今為止還沒有處理該問題的更好辦法
  
  對於每個可選的特征`configurein都應該調用AC_ARG_ENABLE以檢測configure 的用戶是否要求把該特征包含進來確定在缺省情況下每個特征是否被包含進來以及那些選項是合法的是你的任務
  宏 AC_ARG_ENABLE (featurehelpstring [actionifgiven [actionifnotgiven]])
  如果用戶以選項`enablefeature或者`disablefeature調用 configure就運行shell命令actionifgiven如果兩個選項都沒有給出就運行shell命令 actionifnotgiven名稱feature表示可選的用戶級功能它應該僅僅由字母數字和破折號(dashes)組成
  
  shell命令可以通過訪問shell變量enableval來得到選項的參數該變量的值實際上就是把shell變量 enable_feature的值中所有的`字符替換成`_而得到的如果你願意可以使用變量enable_featurehelpstring參數類似於 AC_ARG_WITH中相應的參數(參見與外部軟件一起工作)
  
  宏 AC_ENABLE (featureactionifgiven [actionifnotgiven])
  這是不支持求助字符串的AC_ARG_ENABLE的過時版本
  
  配置站點細節
  有些軟件包需要復雜的與站點相關(sitespecific)的信息例如用於某種服務公司名稱和email聯系地址的主名(host names)因為有些配置腳本是通過Metaconfig方式交互地詢問這些信息生成的人們有時對於按非交互方式由Autoconf生成配置腳本如何獲取這些信息感到困惑
  
  這些站點配置信息應該被儲存在一個僅僅由用戶而不是程序編輯的文件中文件的位置既可以基於 prefix變量也可以是一個標准的位置比如說用戶的home目錄它甚至可能通過一個環境變量給出程序應該在運行時而不是在編譯時檢查那個文件運行時配置對於用戶來說更為方便並且使得配置過程比在配置時獲取這些信息要簡單關於存放數據文件的地點的詳細信息參見GNU編碼標准中的 `為安裝目錄而提供的變量
  
  在安裝的時候改變程序的名稱
  Autoconf支持在安裝程序的時候修改程序的名稱為了使用這些變換`configurein必須調用宏 AC_ARG_PROGRAM
  宏 AC_ARG_PROGRAM
  把對被安裝的程序的名稱進行替換的sed命令序列存入輸出變量program_transform_name中
  
  如果把下列任意選項傳遞給了configure程序名就據此進行變換否則如果已經調用了AC_CANONICAL_SYSTEM並且`target的值給出了與主機類型(用`host給出的或者是在configsub中設置的缺省值)不同的類型就把末尾附加了破折號的目標類型作為前綴否則就不進行程序名變換
  轉換選項
From:http://tw.wingwit.com/Article/program/Oracle/201311/18172.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.