Autoconfラーニング-configureスクリプトの作成

6033 ワード

Autoconfラーニング-configureスクリプトの作成
3 Making configure Scripts
Autoconfによって生成される構成スクリプトは、通常configureと呼ばれます.configureが実行されると、適切な値を持つ構成パラメータを含むいくつかのファイルが生成されます.
configureによって生成されたファイルは、次のとおりです.
  • 通常各サブディレクトリに1つ(see Makefile Substitutions)を含む1つまたは複数のMakefileファイル.
  • オプションのCヘッダファイルで、ファイル名は構成可能であり、#define命令(see Configuration Headers)を含む.
  • config.status-shell script-実行時に上記のファイルを再生成します(see config.status Invocation).
  • は通常configと命名する.Cacheのファイル(`configure--config-cache'を実行したときに発生した)は、テストで発生した結果(seeCache Files)を保存します.
  • config.logファイル:コンパイラによって生成されたすべてのメッセージを記録し、configureエラーが発生した場合にデバッグを支援します.

  • Autoconfを使用してconfigureファイルを生成するには、Autoconf入力ファイルconfigureを作成する必要があります.ac(configure.in)でAutoconfを実行します.自分の特性テストを追加したい場合はaclocalという名前を書きます.m 4とacsite.m 4のファイル.#defineコマンドを含むCヘッダファイルを作成する場合はautoheaderを実行する必要があり、configを生成する.h.inファイル.
    次の図はconfigurationで使用されるファイルがどのように生成されるかを示しています.実行されるプログラムの接尾辞は「*」です.オプションのファイルは[]で囲まれています.Autoconfおよびautoheaderも、インストールされているAutoconfマクロファイル(autoconf.m 4)を読み込みます.
    Files used in preparing a software package for distribution:
         your source files --> [autoscan*] --> [configure.scan] --> configure.ac
         
         configure.ac --.
                        |   .------> autoconf* -----> configure
         [aclocal.m4] --+---+
                        |   `-----> [autoheader*] --> [config.h.in]
         [acsite.m4] ---'
         
         Makefile.in -------------------------------> Makefile.in

    Files used in configuring a software package:
                                .-------------> [config.cache]
         configure* ------------+-------------> config.log
                                |
         [config.h.in] -.       v            .-> [config.h] -.
                        +--> config.status* -+               +--> make*
         Makefile.in ---'                    `-> Makefile ---'
    
    
    
                  ,      configure.ac  ,                           Autoconf    。Autoconf      
            。          ,    Autoconf        。            ,configure.ac          shell  。autoscan 
           configure.ac  。
         Autoconf    configure.in,       (                    ),  config.h.in     (.in    configure  )。  
        configure.ac。
    
    
    shell               ,           ——autoconf,    Autoconf  ——'configure.ac',           shell  ——configure。
    Autoconf    sh     ,  autoconf              (macro expander):             ,            ,         sh  。
              Autoconf    ,              , M4,          M4    。
    
    
    Autoconf              ,            。  , C                ,  Autoconf        。  ,                     :
      。
    
            ,                 。        M4     “【】” ,     。                 ,     。    ,             
         “[]”  ,            。              。     “()”   ,    “()”        。
      :
    AC_CHECK_HEADER([stdio.h],
    [AC_DEFINE([HAVE_STDIO_H], [1],
    [Define to 1 if you have <stdio.h>.])],
    [AC_MSG_ERROR([Sorry, can’t do anything for you])])
        ,       :
    AC_CHECK_HEADER([stdio.h],
    [AC_DEFINE([HAVE_STDIO_H], 1,
    [Define to 1 if you have <stdio.h>.])],
    [AC_MSG_ERROR([Sorry, can’t do anything for you])])
      '1'          。
     Cautious Autoconf users would keep
    the quotes, but many Autoconf users find such precautions annoying, and would rewrite
    the example as follows:
    AC_CHECK_HEADER(stdio.h,
    [AC_DEFINE(HAVE_STDIO_H, 1,
    [Define to 1 if you have <stdio.h>.])],
    [AC_MSG_ERROR([Sorry, can’t do anything for you])])
            ,        ,          “HAVE_STDIO_H”,“stdio”,  “h”。    “Define to 1 if you have <stdio.h>.”    “[]”,     ,              
          。
    
                  :
    AC_CHECK_HEADER(stdio.h,
    AC_DEFINE(HAVE_STDIO_H, 1,
    Define to 1 if you have <stdio.h>.),
    AC_MSG_ERROR([Sorry, can’t do anything for you]))
    
         ,                     。          “[]”   ,          :
    8 Autoconf
    echo "Hard rock was here! --[AC_DC]"
    which results in:
    echo "Hard rock was here! --AC_DC"
    
                          :
    AC_MSG_WARN([[AC_DC stinks --Iron Maiden]])
    
                         ,         ,               。  ,          。  :
    
    AC_COMPILE_IFELSE([char b[10];], [], [AC_MSG_ERROR([you lose])])     。
    
    AC_COMPILE_IFELSE        ‘char b[10];’       ,    ‘char b10;’。                   ——"char b[10];",         :
    AC_COMPILE_IFELSE([[char b[10];]], [], [AC_MSG_ERROR([you lose])])
    
         ,  (  AC_DEFINE AS_HELP_STRING        )      ——       line breaking——           。          
          broken,            。
              ,  [arg]       ,     “[]”        。     ,         '[]'  ,            (               )。
            :
    AC_CHECK_HEADERS([stdio.h], [], [], [])
    AC_CHECK_HEADERS([stdio.h],,,)
    AC_CHECK_HEADERS([stdio.h])
    
     configure.ac ,              。             ,                。
                shell        ,       shell  ?    。
    configure.ac           “#”。
    
    
    
    configure.ac  Autoconf        ,      。  ,AC_INIT   check    , AC_OUTPUT       ,                   。
               。           ,          ,        。
    
           ,       Autoconf      。                 ,               。
    
    Autoconf requirements
    AC_INIT(package, version, bug-report-address)
    information on the package
    checks for programs
    checks for libraries
    checks for header files
    checks for types
    checks for structures
    checks for compiler characteristics
    checks for library functions
    checks for system services
    AC_CONFIG_FILES([file...])
    AC_OUTPUT
    
    
    autoscan               /    configure.ac  。autoscan                     (              )             。      
              ,     configure.scan  ,    configure.ac     ,            configure.ac  。
        configure.scan      configure.ac  ,           ,           。              ,      AC_CONFIG_HEADERS ()
    。            #if         Autoconf    ()。   
     autoscan                            ( Autoconf     )        。            :        ,       ,          。
    autoscan       :
    
    ifnames              configure.ac  。      ——       C        。               ,ifnames               。
    ifnames      :
           automake     ,        configure.ac     ,          GNU Build  ,           。