linux 的make命令

libowenhit 2010-12-21

linux 的make命令

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 byscanning 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>

intmain(intargc,char**argv)

{

printf("Hello,GNU!n");

return0;

}

[litao@vm0000131 hello]$ ll

total4

-rw-rw-r-- 1 litao litao 68 Aug 12 12:02 hello.c

一、autoscan

[litao@vm0000131 hello]$ autoscan

autom4te:configure.ac:nosuchfileordirectory

autoscan:/usr/bin/autom4tefailedwithexitstatus:1

[litao@vm0000131hello]$ll

total8

-rw-rw-r--1litaolitao0Aug1212:03autoscan.log

-rw-rw-r--1litaolitao457Aug1212:03configure.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@vm0000131hello]$vimconfigure.in

#                                               -*- Autoconf -*-

#Processthisfilewithautoconftoproduceaconfigurescript.

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)

#Checksforprograms.

AC_PROG_CC

#Checksforlibraries.

#Checksforheaderfiles.

#Checksfortypedefs,structures,andcompilercharacteristics.

#Checksforlibraryfunctions.

AC_OUTPUT(Makefile)

二、acloacl

[litao@vm0000131 hello]$ aclocal

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

[litao@vm0000131 hello]$ ll

total44

-rw-rw-r--1litaolitao31120Aug1212:08aclocal.m4

drwxr-xr-x2litaolitao4096Aug1212:08autom4te.cache

-rw-rw-r--1litaolitao0Aug1212:03autoscan.log

-rw-rw-r--1litaolitao496Aug1212:08configure.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@vm0000131hello]$ll

total168

-rw-rw-r--1litaolitao31120Aug1212:08aclocal.m4

drwxr-xr-x2litaolitao4096Aug1212:11autom4te.cache

-rw-rw-r--1litaolitao0Aug1212:03autoscan.log

-rwxrwxr-x1litaolitao122297Aug1212:11configure

-rw-rw-r--1litaolitao496Aug1212:08configure.in

-rw-rw-r--1litaolitao68Aug1212:02hello.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:requiredfile`./install-sh'notfound

configure.in:requiredfile`./missing'notfound

Makefile.am:requiredfile`./depcomp'notfound

[litao@vm0000131hello]$automake--add-missing

configure.in:installing`./install-sh'

configure.in:installing`./missing'

Makefile.am:installing`./depcomp'

[litao@vm0000131hello]$ll

total192

-rw-rw-r--1litaolitao31120Aug1212:08aclocal.m4

drwxr-xr-x2litaolitao4096Aug1212:14autom4te.cache

-rw-rw-r--1litaolitao0Aug1212:03autoscan.log

-rwxrwxr-x1litaolitao122297Aug1212:11configure

-rw-rw-r--1litaolitao496Aug1212:08configure.in

lrwxrwxrwx1litaolitao31Aug1212:16depcomp->/usr/share/automake-1.9/depcomp

-rw-rw-r--1litaolitao68Aug1212:02hello.c

lrwxrwxrwx1litaolitao34Aug1212:16install-sh->/usr/share/automake-1.9/install-sh

-rw-rw-r--1litaolitao69Aug1212:15Makefile.am

-rw-rw-r--1litaolitao16561Aug1212:16Makefile.in

lrwxrwxrwx 1 litao litao     31 Aug 12 12:16 missing -> /usr/share/automake-1.9/missing

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

转自:http://hi.baidu.com/litaosmile/blog/item/0c5562139fe5ced9f6039ee3.html

相关推荐