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:
Files used in configuring a software package:
3 Making configure Scripts
Autoconfによって生成される構成スクリプトは、通常configureと呼ばれます.configureが実行されると、適切な値を持つ構成パラメータを含むいくつかのファイルが生成されます.
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 , 。