• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 319, comments - 22, trackbacks - 0, articles - 11
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            Configure,Makefile.am, Makefile.in, Makefile文件之間關系

            Posted on 2012-04-03 22:20 RTY 閱讀(814) 評論(0)  編輯 收藏 引用 所屬分類: C/C++ 、Linux
            Configure,Makefile.am, Makefile.in, Makefile文件之間關系
            2009-08-12 12:14

            1.autoscan (autoconf): 掃描源代碼以搜尋普通的可移植性問題,比如檢查編譯器,庫,頭文件等,生成文件configure.scan,它是configure.ac的一個雛形。

            your source files --> [autoscan*] --> [configure.scan] --> configure.ac

            2.aclocal (automake):根據已經安裝的宏,用戶定義宏和acinclude.m4文件中的宏將configure.ac文件所需要的宏集中定義到文件 aclocal.m4中。aclocal是一個perl 腳本程序,它的定義是:“aclocal - create aclocal.m4 by scanning configure.ac”
            user input files   optional input     process          output files
            ================ ============== ======= ============

            acinclude.m4 - - - - -.
            V
            .-------,
            configure.ac ------------------------>|aclocal|
            {user macro files} ->| |------> aclocal.m4
            `-------'
            3.autoheader(autoconf): 根據configure.ac中的某些宏,比如cpp宏定義,運行m4,聲稱config.h.in

            user input files optional input process output files
            ================ ============== ======= ============

            aclocal.m4 - - - - - - - .
            |
            V
            .----------,
            configure.ac ----------------------->|autoheader|----> autoconfig.h.in
            `----------'

            4.automake: automake將Makefile.am中定義的結構建立Makefile.in,然后configure腳本將生成的Makefile.in文件轉換 為Makefile。如果在configure.ac中定義了一些特殊的宏,比如AC_PROG_LIBTOOL,它會調用libtoolize,否則它 會自己產生config.guess和config.sub

            user input files   optional input   processes          output files
            ================ ============== ========= ============

            .--------,
            | | - - -> COPYING
            | | - - -> INSTALL
            | |------> install-sh
            | |------> missing
            |automake|------> mkinstalldirs
            configure.ac ----------------------->| |
            Makefile.am ----------------------->| |------> Makefile.in
            | |------> stamp-h.in
            .---+ | - - -> config.guess
            | | | - - -> config.sub
            | `------+-'
            | | - - - -> config.guess
            |libtoolize| - - - -> config.sub
            | |--------> ltmain.sh
            | |--------> ltconfig
            `----------'

            5.autoconf:將configure.ac中的宏展開,生成configure腳本。這個過程可能要用到aclocal.m4中定義的宏。

            user input files   optional input   processes          output files
            ================ ============== ========= ============

            aclocal.m4 ,autoconfig.h.in - - - - - - -.
            V
            .--------,
            configure.ac ----------------------->|autoconf|------> configure
             
            6. ./configure的過程

            .-------------> [config.cache]
            configure* --------------------------+-------------> config.log
            |
            [config.h.in] -. v .--> [autoconfig.h]
            +-------> config.status* -+
            Makefile.in ---' `--> Makefile
             
            7. make過程
             
            [autoconfig.h] -.
            +--> make* ---> 程序
            Makefile ---'
             
            .---------,
            config.site - - ->| |
            config.cache - - ->|configure| - - -> config.cache
            | +-,
            `-+-------' |
            | |----> config.status
            config.h.in ------->|config- |----> config.h
            Makefile.in ------->| .status|----> Makefile
            | |----> stamp-h
            | +--,
            .-+ | |
            | `------+--' |
            ltmain.sh ------->|ltconfig|-------> libtool
            | | |
            `-+------' |
            |config.guess|
            | config.sub |
            `------------'

            .--------,
            Makefile ------>| |
            config.h ------>| make |
            {project sources} ---------------->| |--------> {project targets}
            .-+ +--,
            | `--------' |
            | libtool |
            | missing |
            | install-sh |
            |mkinstalldirs|
            `-------------'
            實例:
            在/hello/目錄下創建一個hello.c文件,并編譯運行它:

            #cd /hello/

            (1) 編寫源文件hello.c:

            #include<stdio.h>
            int main(int argc, char** argv)
            {
            printf("Hello, GNU!n");
            return 0;
            }

            [litao@vm0000131 hello]$ ll
            total 4
            -rw-rw-r-- 1 litao litao 68 Aug 12 12:02 hello.c

            一、autoscan

            [litao@vm0000131 hello]$ autoscan
            autom4te: configure.ac: no such file or directory
            autoscan: /usr/bin/autom4te failed with exit status: 1
            [litao@vm0000131 hello]$ ll
            total 8
            -rw-rw-r-- 1 litao litao 0 Aug 12 12:03 autoscan.log
            -rw-rw-r-- 1 litao litao 457 Aug 12 12:03 configure.scan
            -rw-rw-r-- 1 litao litao 68 Aug 12 12:02 hello.c

            已經生成了configure.scan,autoscan.log文件

            將configure.scan 修改為 configure.in,最后修改的內容如下:

            [litao@vm0000131 hello]$ mv configure.scan configure.in
            [litao@vm0000131 hello]$ vim configure.in

            # -*- Autoconf -*-
            # Process this file with autoconf to produce a configure script.

            AC_PREREQ(2.59)
            AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
            AC_CONFIG_SRCDIR([hello.c])
            #AC_CONFIG_HEADER([config.h])
            AM_INIT_AUTOMAKE(hello, 1.0)
            # Checks for programs.
            AC_PROG_CC

            # Checks for libraries.

            # Checks for header files.

            # Checks for typedefs, structures, and compiler characteristics.

            # Checks for library functions.
            AC_OUTPUT(Makefile)

            二、acloacl

            [litao@vm0000131 hello]$ aclocal

            生成 aclocal.m4 和 autom4te.cache (生成aclocal.m4的過程中涉及到configure.in)

            [litao@vm0000131 hello]$ ll
            total 44
            -rw-rw-r-- 1 litao litao 31120 Aug 12 12:08 aclocal.m4
            drwxr-xr-x 2 litao litao 4096 Aug 12 12:08 autom4te.cache
            -rw-rw-r-- 1 litao litao 0 Aug 12 12:03 autoscan.log
            -rw-rw-r-- 1 litao litao 496 Aug 12 12:08 configure.in
            -rw-rw-r-- 1 litao litao 68 Aug 12 12:02 hello.c

            三、antoconf

            [litao@vm0000131 hello]$ autoconf
            生成 configure (根據 configure.in, 和 aclocal.m4)
            [litao@vm0000131 hello]$ ll
            total 168
            -rw-rw-r-- 1 litao litao 31120 Aug 12 12:08 aclocal.m4
            drwxr-xr-x 2 litao litao 4096 Aug 12 12:11 autom4te.cache
            -rw-rw-r-- 1 litao litao 0 Aug 12 12:03 autoscan.log
            -rwxrwxr-x 1 litao litao 122297 Aug 12 12:11 configure
            -rw-rw-r-- 1 litao litao 496 Aug 12 12:08 configure.in
            -rw-rw-r-- 1 litao litao 68 Aug 12 12:02 hello.c

            四、編寫Makefile.am:

            AUTOMAKE_OPTIONS= foreign
            bin_PROGRAMS= hello
            hello_SOURCES= hello.c

            五、automake

            生成 Makefile.in, depcomp, install-sh, 和 missing (根據 Makefile.am, 和 aclocal.m4)

            [litao@vm0000131 hello]$ automake
            configure.in: required file `./install-sh' not found
            configure.in: required file `./missing' not found
            Makefile.am: required file `./depcomp' not found
            [litao@vm0000131 hello]$ automake --add-missing
            configure.in: installing `./install-sh'
            configure.in: installing `./missing'
            Makefile.am: installing `./depcomp'
            [litao@vm0000131 hello]$ ll
            total 192
            -rw-rw-r-- 1 litao litao 31120 Aug 12 12:08 aclocal.m4
            drwxr-xr-x 2 litao litao 4096 Aug 12 12:14 autom4te.cache
            -rw-rw-r-- 1 litao litao 0 Aug 12 12:03 autoscan.log
            -rwxrwxr-x 1 litao litao 122297 Aug 12 12:11 configure
            -rw-rw-r-- 1 litao litao 496 Aug 12 12:08 configure.in
            lrwxrwxrwx 1 litao litao 31 Aug 12 12:16 depcomp -> /usr/share/automake-1.9/depcomp
            -rw-rw-r-- 1 litao litao 68 Aug 12 12:02 hello.c
            lrwxrwxrwx 1 litao litao 34 Aug 12 12:16 install-sh -> /usr/share/automake-1.9/install-sh
            -rw-rw-r-- 1 litao litao 69 Aug 12 12:15 Makefile.am
            -rw-rw-r-- 1 litao litao 16561 Aug 12 12:16 Makefile.in
            lrwxrwxrwx 1 litao litao 31 Aug 12 12:16 missing -> /usr/share/automake-1.9/missing

            六、configure
            生成 Makefile, config.log, 和 config.status


            久久夜色精品国产亚洲av| 精品乱码久久久久久久| 狠狠久久综合伊人不卡| 国产成人久久精品二区三区| 久久久久国产视频电影| 久久精品一本到99热免费| 97久久超碰国产精品旧版| 精品久久人人做人人爽综合| 伊人久久大香线蕉亚洲| 91久久福利国产成人精品| 99久久免费国产精品特黄| 精品综合久久久久久97超人| 日韩亚洲国产综合久久久| 国产美女久久精品香蕉69| 精品久久久久久无码不卡| 久久久久国产精品| 亚洲中文久久精品无码ww16| 国产精品丝袜久久久久久不卡| 亚洲中文久久精品无码ww16| 久久精品国产亚洲一区二区三区 | 成人国内精品久久久久影院| 久久精品国产一区二区| 精品久久香蕉国产线看观看亚洲| 久久这里的只有是精品23| 久久综合狠狠综合久久激情 | 久久夜色精品国产噜噜亚洲AV| 亚洲国产精品无码久久青草| 久久www免费人成精品香蕉| 国产欧美久久一区二区| 久久久久久毛片免费播放| 亚洲精品国精品久久99热一| 久久婷婷人人澡人人爽人人爱 | 国产精品久久久久久久app| 中文字幕一区二区三区久久网站| 精品国产乱码久久久久久1区2区 | 深夜久久AAAAA级毛片免费看| 国产精品免费久久| 国产精久久一区二区三区| 国产91久久综合| 久久人人爽人人澡人人高潮AV| 久久精品99无色码中文字幕|