为什么80%的码农都做不了架构师?>>>   

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.inuser 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.statusconfig.h.in ------->|config-  |----> config.hMakefile.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

转载于:https://my.oschina.net/guyson/blog/282148

Configure,Makefile.am, Makefile.in, Makefile文件之间关系相关推荐

  1. (07)Makefile回顾之config.ini文件理解

    Makefile回顾,阅读makefile,config.ini文件,自行写阅读理解. 1,Makefile文件的理解 打开Makefile文件所在路径,如下图. 用vim文本编译器打开Makefil ...

  2. makefile第2篇 makefile讲解

    makefile详细TL教程 本文章是从各个博客及书籍整理而来的,从一个个小示例,从而完成.自动化编译整个项目. 参考书籍: GNU_makefile中文手册,跟我一起写Makefile make 是 ...

  3. Failure to open file: /home/samba/demo/untitled/Makefile Unable to generate makefile for: /home/samb

    记录初学linux时,使用QT交叉编译碰到的坑. Failure to open file: /home/samba/demo/untitled/Makefile Unable to generate ...

  4. 轻松玩转Makefile | 企业项目级Makefile实例

    前言 本文展示了一个比较完整的企业项目级别的Makefile文件,包括了:文件调用,源文件.头文件.库文件指定,软件版本号.宏定义,编译时间,自动目录等内容. 1.目录架构 本文中所采用的目录架构,在 ...

  5. linux下比较文件并输出,Linux使用diff命令比较文件找出文件之间相同的部分

    如果你需要比较系统文件的内容,那么你就会是使用到diff命令,可找出文件之间相同的部分,下面小编就给大家详细介绍下Linux diff命令的用法. diff 命令是 linux上非常重要的工具,用于比 ...

  6. vim打开多窗口、多文件之间的切换

    打开多个文件: 一.vim还没有启动的时候: 1.在终端里输入 vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :e file 可以再打开一个 ...

  7. 单片机怎么用回调函数在不同文件之间传递数据

    大家好,我是无际. 今天继续来聊下回调函数. 之前写过一篇受到了广大老铁们的认可. 最近有几个新学员被回调函数搞得有点懵逼. 不理解为什么要搞这种绕来绕去.指针指来指去的函数. 先写篇文章预热一下,晚 ...

  8. Visual Studio各版本工程文件之间的转换 [转载]

    原网址:http://www.cnblogs.com/jmliao/p/5594179.html Visual Studio各版本工程文件之间的转换 由于VS版本比较多,低版本无法直接打开高版本的工程 ...

  9. vim——打开多个文件、同时显示多个文件、在文件之间切换

    为什么80%的码农都做不了架构师?>>>    打开多个文件: 1.vim还没有启动的时候: 在终端里输入  vim file1 file2 ... filen便可以打开所有想要打开 ...

最新文章

  1. 大学计算机专业副修课,计算机学院举行本科课程教学大纲修订工作研讨会
  2. springMVC入门截图
  3. 浏览器缓存:强缓存和协商缓存
  4. 网页瀑布流效果实现的几种方式
  5. 怎样把一个项目加入微服务器,构建微服务:快速搭建Spring Boot项目
  6. Python Requests快速入门
  7. java 对象 读写锁_读写锁的java实现
  8. Spring Cloud--Honghu Cloud分布式微服务云系统—组件化
  9. HALCON示例程序clip.hdev曲别针方向识别
  10. 近半年能力没进步原因分析与求助
  11. 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)
  12. 取模除法(逆元)(费马小定理)(线性求逆元)
  13. VBNET的一些特殊能力
  14. PHP动态网页设计:第2版pdf
  15. 学而时娱之,不亦乐乎
  16. 在window中nginx安装腾讯云ssl报错nginx: [emerg] cannot load certificate
  17. 大数据与智慧城市建设论坛
  18. C++ 数据结构——BF算法
  19. 三代开源社区的协作模式
  20. 【通信】链路预算(Link Budget)

热门文章

  1. iOS UITextView 随键盘弹出界面上移
  2. 使用kaptcha生成验证码
  3. Git安装配置(Linux)
  4. 型网站的架构设计问题----大型高并发高负载网站的系统架构
  5. [BZOJ2527]Meteors
  6. SpringMVC4.x源码分析(五):request请求寻址HandlerMethod原理
  7. 可能是 nginx 限速最容易理解的说明
  8. Rancher部署Traefik实现微服务的快速发现
  9. 如何保护Ubuntu 16.04上的NGINX Web服务器
  10. centos7 firewall 防火墙 命令