• <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文件之間關系
            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


            久久99热这里只有精品国产| 久久精品a亚洲国产v高清不卡| 久久精品国产亚洲一区二区| 99久久国产综合精品麻豆| 久久精品中文无码资源站| 亚洲综合精品香蕉久久网97| 欧美日韩中文字幕久久久不卡| 2021国内精品久久久久久影院| 国产产无码乱码精品久久鸭| 久久久久97国产精华液好用吗| 午夜欧美精品久久久久久久| 伊人色综合久久天天| 伊人久久综合精品无码AV专区| 国产福利电影一区二区三区久久久久成人精品综合 | 国产亚洲美女精品久久久| 狠狠综合久久AV一区二区三区| 久久国产高潮流白浆免费观看| 国产精品嫩草影院久久| 色综合久久无码中文字幕| 久久久久黑人强伦姧人妻| 国产亚洲精久久久久久无码| 久久久久久久久66精品片| 狠狠久久亚洲欧美专区| 久久SE精品一区二区| 久久久久人妻一区精品| 久久免费国产精品一区二区| 日日噜噜夜夜狠狠久久丁香五月| 色欲综合久久躁天天躁| 99国内精品久久久久久久| 欧美喷潮久久久XXXXx| 久久中文字幕人妻熟av女| 亚洲国产精品无码久久九九| 久久久噜噜噜久久中文字幕色伊伊| 国产精品美女久久久m| 麻豆亚洲AV永久无码精品久久| 国产99久久久国产精品小说| 中文字幕无码av激情不卡久久| 亚洲а∨天堂久久精品| 亚洲国产精品无码久久久久久曰 | 色综合久久久久| 国内精品久久久久影院免费|