當前位置:編程學習大全網 - 源碼下載 - autoconf手冊(七)

autoconf手冊(七)

獲取規範的系統類型 下列的宏使得configure腳本可以獲得系統類型 它們運行shell腳本config guess以確定用戶在命令行中沒有給出的 它們需要的關於主機 目標和創建類型的所有值 它們運行config sub對用戶給出的任何別名進行規範化 如果妳使用這些宏 妳必須把這兩個shell腳本與妳的源代碼壹同發布 關於 AC_CONFIG_AUX_DIR的信息 妳可以通過該宏設置configure查找這些腳本的目錄 請參見 創建輸出文件 如果妳沒有使用這些宏中的任意壹個 configure 就忽略任何傳遞給它的` host ` target 和` build 選項 宏 AC_CANONICAL_SYSTEM 檢測系統類型並把輸出變量設置成規範的系統類型 關於該宏設置變量的細節 參見系統類型變量 宏 AC_CANONICAL_HOST 只執行AC_CANONICAL_SYSTEM中關於主機類型功能的子集 對於不是編譯工具鏈(piler toolchain)壹部分的程序 這就是所需要的全部功能 宏 AC_VALIDATE_CACHED_SYSTEM_TUPLE (cmd) 如果緩存文件與當前主機 目標和創建系統類型不壹致 就執行cmd或者打印壹個缺省的錯誤消息   系統類型變量 在調用了AC_CANONICAL_SYSTEM之後 下列輸出變量包含了系統類型信息 在調用了AC_CANONICAL_HOST 之後 只設置了下列host變量 build host target   規範系統名稱 build_alias host_alias target_alias 如果使用了config guess 就是用戶指定的名稱或者規範名稱 build_cpu build_vendor build_os host_cpu host_vendor host_os target_cpu target_vendor target_os 為方便而提供的規範名稱的獨立部分 使用系統類型 妳將如何使用規範的系統類型?通常 妳在`configure in 中的壹個或多個case語句中使用它來選擇系統特定的C文件 而後把那些使用基於系統名的文件名的文件連接到諸如`host h 或`target c 的普通的文件上 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 (source dest ) 使得AC_OUTPUT把每個存在文件的source連接到對應連接名dest 如果可能 創建壹個符號連接 否則就創建硬連接 dest和source應該是相對於頂層源代碼目錄或者創建目錄的相對路徑 可以多次調用本宏   例如 下列調用 AC_LINK_FILES(config/${machine} h config/${obj_format} h host h object h)   在當前目錄中創建`host h 它是壹個到`srcdir/config/${machine} h 的連接 並且創建`object h 它是壹個到`srcdir/config/${obj_format} h 的連接 妳還可以使用主機系統類型以尋找交叉編譯工具 關於完成該任務的宏AC_CHECK_TOOL的信息 參見對普通程序和文件的檢查   站點配置 configure腳本支持幾種本地配置決策方式 它們是用戶指明外部軟件的位置 包括或除去可選的特征 以修改過的名稱安裝的程序 以及為configure選項設置缺省值的手段   與外部軟件壹起工作 有些軟件包需要 或者可選地使用其它已經安裝的軟件包 用戶可以把命令行選項傳遞給configure 以指明使用那個外部軟件 選項采用下列形式之壹  with package[=arg]  without package 例如 ` with gnu ld 的意思是使用GNU連接器而不是任何其它連接器 ` with x 的意思是使用X Window系統   用戶可以給出包名加`= 加參數的命令行參數 `no 是關於包的缺省參數 它表示不使用包 既不是`yes 又不是`no 的參數將包含其它包的名字或者版本號 以便更精確地指定本程序可以與之協同工作的包 如果沒有給出參數 ` without package 的缺省參數為`yes ` without package 等價於` with package=no   configure腳本並不對它們不支持的` with package 選項發出警告 本特征允許頂層目錄中的configure腳本配置壹個包含多個包的源代碼樹 在包支持不同的選項的時候 不會因為給出了只有壹部分包支持的選項而導致不必要的錯誤消息 壹個不幸的副作用是選項的拼寫錯誤就不能被檢查出來了 迄今為止還沒有處理該問題的更好辦法   對於每個可能使用的外部軟件包 `configure in 都應該調用AC_ARG_WITH以檢測 configure的用戶是否要求使用它 確定在缺省狀態下 是使用還是不使用每個包 以及那個參數是合法的 是妳的任務 宏 AC_ARG_WITH (package help string [ action if given [ action if not given]]) 如果用戶以選項` with package 或者` without package 調用 configure 就運行shell命令action if given 如果兩個選項都沒有給出 就運行shell命令 action if not given 名字package給出了本程序應該與之協同工作的其它軟件包 它應該僅僅由字母 數字和破折號(dashes)組成   shell命令action if given可以通過shell變量withval得到選項的參數 該變量的值實際上就是把 shell變量with_package的值中的所有` 字符替換為`_ 而得的 如果妳願意 可以使用變量with_package   參數help string是對選項的描述 它看起來應該像    with readline?support fancy mand line editing   如果需要給出更多的細節 help string可能多於壹行 只要確保`configure help 中的列的排列就可以了 不要在求助字符串中使用tab 妳將需要用`[ 和`] 包圍它以生成前導空格   宏 AC_WITH (package action if given [ action if not given]) 這是不支持求助字符串的AC_ARG_WITH的過時版本   選擇包選項 如果軟件包含有可選的編譯時(pile time)特征 用戶就可以在調用configure時使用命令行選項來指明是否編譯它們 選項采用如下形式之壹    enable feature[=arg]  disable feature   這些選項允許用戶選擇可選的選項進行創建和安裝 ` enable feature 選項永遠不要使特征的行為變得不同或者導致壹個特征代替另壹個特征 它們只應該導致程序的壹部分被創建而另壹部分不創建   用戶可以通過在特征名之後添加`= 和參數來給出參數 給出參數`no 表示 不能使用該特征 壹個帶有參數的特征看起來就像` enable debug=stabs 如果沒有給出參數 它的缺省值就是`yes ` disable feature 等價於 ` enable feature=no   configure腳本並不對它們所不支持的` enable feature 選項發出警告 本特征允許頂層目錄中的configure腳本配置壹個包含多個包的源代碼樹 在包支持不同的選項的時候 不會因為給出了只有壹部分包支持的選項而導致不必要的錯誤消息 壹個不幸的副作用是選項的拼寫錯誤就不能被檢查出來了 迄今為止還沒有處理該問題的更好辦法   對於每個可選的特征 `configure in 都應該調用AC_ARG_ENABLE以檢測configure 的用戶是否要求把該特征包含進來 確定在缺省情況下 每個特征是否被包含進來 以及那些選項是合法的 是妳的任務 宏 AC_ARG_ENABLE (feature help string [ action if given [ action if not given]]) 如果用戶以選項` enable feature 或者` disable feature 調用 configure 就運行shell命令action if given 如果兩個選項都沒有給出 就運行shell命令 action if not given 名稱feature表示可選的用戶級功能 它應該僅僅由字母 數字和破折號(dashes)組成   shell命令可以通過訪問shell變量enableval來得到選項的參數 該變量的值實際上就是把shell變量 enable_feature的值中所有的` 字符替換成`_ 而得到的 如果妳願意 可以使用變量enable_feature help string參數類似於 AC_ARG_WITH中相應的參數(參見與外部軟件壹起工作)   宏 AC_ENABLE (feature action if given [ action if not given]) 這是不支持求助字符串的AC_ARG_ENABLE的過時版本   配置站點細節 有些軟件包需要復雜的與站點相關(site specific)的信息 例如用於某種服務 公司名稱和email聯系地址的主名(host names) 因為有些配置腳本是通過Metaconfig方式交互地詢問這些信息生成的 人們有時對於按非交互方式 由Autoconf生成配置腳本如何獲取這些信息感到困惑   這些站點配置信息應該被儲存在壹個僅僅由用戶 而不是程序 編輯的文件中 文件的位置既可以基於 prefix變量 也可以是壹個標準的位置 比如說用戶的home目錄 它甚至可能通過壹個環境變量給出 程序應該在運行時 而不是在編譯時 檢查那個文件 運行時配置對於用戶來說更為方便 並且使得配置過程比在配置時獲取這些信息要簡單 關於存放數據文件的地點的詳細信息 參見GNU編碼標準中的 `為安裝目錄而提供的變量   在安裝的時候改變程序的名稱 Autoconf支持在安裝程序的時候修改程序的名稱 為了使用這些變換 `configure in 必須調用宏 AC_ARG_PROGRAM 宏 AC_ARG_PROGRAM 把對被安裝的程序的名稱進行替換的sed命令序列存入輸出變量program_transform_name中   如果把下列任意選項傳遞給了configure 程序名就據此進行變換 否則 如果已經調用了AC_CANONICAL_SYSTEM並且` target 的值給出了與主機類型(用` host 給出的 或者是在config sub中設置的缺省值)不同的類型 就把末尾附加了破折號的目標類型作為前綴 否則 就不進行程序名變換 轉換選項 lishixinzhi/Article/program/Oracle/201311/18172

  • 上一篇:dnf釣魚攻略
  • 下一篇:cf“0x0244cc9d”指令引用“0xa5064e71“內存。該內存不能為
  • copyright 2024編程學習大全網