automakeはautoconfの研究ノート(転載)

..私はいつも忘れて、またはその両方のために非常に重要であり、中国のように良いのLinuxバージョン、それを書き留めて読み、英語での情報を参照することを忘れないで、なぜ知らない

素人の用語を:
Makefile.amためのautomakeを- > Makefileの.IN
configure.acのためのautoconf - >のconfigure 

Makfile.inためのconfigure - > Makefileのの

注意:. configure.ac以前から知られているconfiguer.inが、混乱やMakefile.in

自動スキャン非常に良いツールですが、それ自動的にチェック生成するために、現在のディレクトリ(または指定したディレクトリ)にあるソースコードは
.. configure.scan検出されるが、最初の段落の自動スキャンmanページ添付のconfigure.acテンプレートとして使用することのできる機能を示しconfigure.scan
で調べたソースファイルをディレクトリSRCDIRするAT根ざしツリー、または 
全く場合、現在のディレクトリが与えられている。共通のソースファイルを検索する 
移植性の問題を、 `configure.acの不備をチェックしてください「and`ファイルAを作成configure.scan」予備設定は`そのため.AC」 
パッケージ。

automakeはとautoconf関係は(文書を言うことではautoconfは次のとおりです。Makfile.inをインスタンス化)autoconfの生成したconfigureスクリプトは、Makefile.in Makefileを生成するための変数の機能の一部を交換することで、理由は非常にシンプルですが、非常に近い、configureはインスタンス化することができます任意のファイルは、通常、接尾辞を示す.in。

以下は、トップレベルのディレクトリであるconfigure.acのSMTH_BBS 


AC_INIT(smthbbs、2.0dev、[email protected]
AM_INIT_AUTOMAKE([外国DIST-BZIP2])が//configure.ac Automakeのマクロを使用した
                                     // AutomakeにMakfile.amに従ってMakefile.inを生成
                                     configure.ac、automakeの初期化に読み取るために//
AC_CANONICAL_TARGET
場合、 "ホスト} {$"
  I 86 * - * - * FreeBSDの)
        OSTYPE = "FREEBSD"
        ;;      
  * - * - * Solarisの場合) 
        OSTYPE = "SOLARIS"
        LIBS = "$ LIBS -lnsl -lsocket"
        ;;  
  * - * - * SunOSの)
        OSTYPE = "SUNOS"
        LIBS = "$ LIBS -lnsl -lsocket"
        ;;  
  * - * - * Linuxの)        
        OSTYPE = "LINUX"
        ;;  
  * - * - * Cygwinの)        
        OSTYPE = " CYGWIN "
        LIBS =" $ LIBSの-lcygipc "
        ;;  
  *)        
        OSTYPE =" GENERIC "
        ;;        
ESAC              
CFLAGS =" $ CFLAGS -D $ OSTYPEは「

//カレントディレクトリに設定が含まれてチェックすることで、ソースコードディレクトリの整合性を確保します。 h.in
AC_CONFIG_SRCDIR([、config.h.in])
// config.hの生成されたヘッダファイルは、他の、config.h.inの例であり  
、この命令に応じてconfig.hのautoheaderはを生成//実行コマンド。 中
AM_CONFIG_HEADER(config.hの)

//プレフィックスのデフォルト値に設定
AC_PREFIX_DEFAULT(/ホーム/ BBS)を

m4_include(config.icc)


// --enable-innbbsdパラメータ
AC_ARG_ENABLE(innbbsd、
[--enable-innbbsd
                (innbbsdパッケージを必要とする)innbbsdサポートを有効にします]、
[
        テスト"の$ enableval" = "はい" IF;その後、
                テストinnbbsdを-dのIF;その後、
                    //下Makfile.inがinnbbsdはMakefileを生成するインスタンス化し、
                    linkinnd.shリンクをオンにして実行します//。
                       AC_CONFIG_FILES(innbbsd / Makefileのの
                                    innbbsd / linkinnd .SH)
                    BBSSUBDIRS = "$ BBSSUBDIRSのinnbbsd"
                他
                        AC_MSG_ERRORは、([用パッケージ変更をinnbbsd見つけることができない、それを最初にGETしてください!])
                Fiの
        Fiの
])

// -有効-SSHパラメータ
AC_ARG_ENABLE(SSHを、
[--enable-SSHは
                ] SSH BBSDサポート(ためsshbbsdパッケージ変更を必要とする可能)、
[
        テスト"の$ enableval" = "yes"の場合。その後、
                IFテスト-dのsshbbsdは、次に
                    // sshbbsdディレクトリでconfigureコマンドを実行します
                    。//代わりにMakefileのは相対的な独立性を持っているsshbbsdインスタンスの
                        AC_CONFIG_SUBDIRS(sshbbsd)
            BBSSUBDIRS = " BBSSUBDIRSは$をsshbbsd」
                他
                        AC_MSG_ERRORは([sshbbsdパッケージを見つけることができない、最初にそれを入手してください!])
                Fiの
        Fiの
])

であれば[テスト-z "$のenable_www"]; その後、
        enable_www =はい
Fiを

// - - WWW有効 
AC_ARG_ENABLEを(WWW、
[--enable-WWW
        Webサポート(bbs2www必要なパッケージ)を有効]、
[
        かのテスト"の$ enableval" = "yes"を、次に
                もしテスト-d bbs2www ;次いで
            //实例化bbs2www目录的Makefileを及のconfig.m4文件 
           AC_CONFIG_FILES([bbs2www / Makefileの
                             bbs2www / LIB / Makefileの
                             bbs2www / PHPLIB / Makefileの
                             bbs2www / PHPLIB /のconfig.m4])
            BBSSUBDIRSは= "$ BBSSUBDIRS bbs2www"
                他の
                        AC_MSG_ERROR([bbs2wwwを見つけることができませんパッケージ化することができ、それを最初にGETしてください!])
                Fiの
                CONFIG_HAVE_WWWは。1 =
        他
                CONFIG_HAVE_WWW = 0
        Fiの
])

// *各を交換してください変数@ .inファイする@ CONFIG_HAVE_WWW 
AC_SUBST(CONFIG_HAVE_WWW)
AC_SUBST(BBSSUBDIRS)


m4_include(bbs2www.in)

チェック自動スキャンによって生成され、自動的に//数
ヘッダファイルを#をチェックします。
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS([ARPA / inet.h fcntl.h limits.hにmalloc.hをnetdb.h netinetの/ in.h sgtty.h STDLIB.H string.hのSYS /ファイル.h SYS / ioctl.h SYS / param.h SYS /socket.h SYS / TIME.H termio.h termios.h unistd.h utime.h])

のtypedef、構造、およびコンパイラの特性のため#チェック。
AC_HEADER_STAT
AC_C_CONST
AC_C_INLINE
AC_TYPE_MODE_T
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_HEADER_TIME
AC_STRUCT_TM
AC_CHECK_TYPES([構造体utimbuf]、[]、[]、[#含む<utime.h>])

AC_CHECK_SIZEOF(INT *)
AC_CHECK_SIZEOF(長い長いINT)
AC_CHECK_SIZEOF(long int型)
AC_CHECK_SIZEOF( int型)
AC_CHECK_SIZEOF(int64型)
AC_CHECK_SIZEOF(INT32)

ライブラリ関数の#をチェックします。
AC_CONFIG_LIBOBJ_DIR(LIB)
AC_FUNC_ALLOCA
AC_FUNC_FORK
AC_FUNC_GETLOADAVG
AC_PROG_GCC_TRADITIONAL
AC_FUNC_MALLOC
AC_FUNC_MEMCMP
AC_FUNC_MKTIME
AC_FUNC_MMAP
AC_FUNC_SETPGRP
AC_FUNC_SETVBUF_REVERSED
AC_TYPE_SIGNAL
AC_FUNC_STAT
AC_FUNC_STRFTIME
AC_FUNC_UTIME_NULL
AC_FUNC_VPRINTF
AC_CHECK_FUNCS([アラームのatexit BZERO dup2のftruncateのGETCWDのgethostbyaddrのgethostbynameのgethostname INET_NTOA isasciiはでmemchrのmemset MKDIRと、munmap RMDIR選択ソケットstrcasecmp strcasestr strchrのstrdupはstrerror strncasecmp strpbrk strrchrはstrstr strtolはUTIME memmem群れINET_ATONはinet_pton ISBLANK])
AC_CHECK_TYPES(BOOL)
AC_CHECK_TYPES(sig_t ,,, [書式#include <signal.hに>])

エラー言語を選択DNL
// -有効-サイト 
AC_ARG_ENABLE(サイトを、
[--enable-サイト=サイト名
                          を選択し、サイトの特殊ファイル(サイトのディレクトリを参照してください)]、
[
    BBSSITE = $ enableval
]、 [BBSSITE = "なめらか"
SITEDIR =サイト])
テスト-f $ SRCDIR /サイト/ $ BBSSITE.c場合; その後、
        SITEDIR =サイト

  -f $ SRCDIRテスト/サイト/ $ BBSSITE.c IF;その後、
        sitedir =サイト
  他の
        AC_MSG_ERROR([$ BBSSITEのERROR不明なサイト、サイトを参照してください/!])
  Fiの
Fiの

//各ファイルを置き換える* .IN @ BBSSITE @変数
AC_SUBST(BBSSITE)

プログラムの#かどうかをチェックします。
AC_PROG_CXX
AC_PROG_AWK
AC_PROG_CC
AC_PROG_LIBTOOL
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_RANLIB
AC_PROG_YACCの
m4_include(config.lib)

ライブラリの#かどうかをチェックします。

ソフトリンク//ファイルを作ります。場合は、ソースファイルのチェーンlibBBSとサイトディレクトリsrcディレクトリに
AC_CONFIG_LINKS(libBBS / site.c:$ SITEDIR / $ BBSSITE.c
                libBBS / site.h:$ SITEDIR / $ BBSSITE.h
                のsrc / site.c:$ SITEDIR / $ BBSSITE.c
                のsrc / site.h:$ SITEDIR / $ BBSSITE.h
                libBBS / default.c:$ SITEDIR /デフォルト。 C
                libBBS / default.h:$ SITEDIR / default.h
                のsrc / default.c:$ SITEDIR / default.c
                のsrc / default.h:$ SITEDIR / default.h
                )

のCD libBBS。で私は* [[CH]]。やる 
:AC_CONFIG_LINKS(libBBS / $ Iのsrc / $ I)
で行わ
CDを..

ORIGIN_LIBTOOL = $ LIBTOOL
AC_SUBST(ORIGIN_LIBTOOL)
AC_SUBST(SED)
abssrcdir = `CD $ SRCDIR && pwd`は
LIBTOOL = "$ abssrcdir / wrapper.sh"を
//替换* .IN文件中的@ abssrcdir @变量
AC_SUBST(abssrcdir)

//实例化
AC_CONFIG_FILES([Makefileの
                 libBBS / Makefileに
                 はlibSystem / Makefileの
                 rzsz / Makefileのの
                 デーモン/ Makefileの
                 mail2bbs / Makefileの
                 local_utl / Makefileの
                 サービス/ Makefileのの
                 サービス/ピップ/ Makefileの
                 サービス/ワーカー/メイクファイル
                 サービス/ personaldns /メイクファイルの
                 SRC / bbsconfig.hの
                 SRC /メイクファイル])
AC_CONFIG_FILES(wrapper.sh、chmodの+ X wrapper.sh)
AC_OUTPUT 

ます。https://www.cnblogs.com/niocai/archive/2011/07/14/2106158.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_33682790/article/details/94016950
おすすめ