GNU autotools作用:收集系统配置信息并自动生成Makefile文件。

GNU autotools主要包括三个工具:autoconf、automake、libtool,还有很多辅助的工具,包括:autoheader、aclocal、autoscan。

● autoscan检测源文件生成configure.scan;

● autoconf根据configure.in(或者configure.ac)生成configure;

● automake根据Makefile.am 生成Makefile.in。

这几个工具及中间生成的文件的关系图如图1所示:

图1

Ubuntu下安装:

sudo apt-get install autoconf

sudo apt-get install automake

下面以test工程为例,工程跟目录为test,只有一个源文件main.c。构建的主要步骤如下,其中最主要的步骤是(2)和(6):

(1)运行autoscan检测源文件生成configure.scan,将其修改成configure.in

(2)编辑configure.in

a.修改AC_INIT(FULL-PACKAGE-NAME,VERSION, BUG-REPORT-ADDRESS),FULL-PACKAGE-NAME为程序名称,VERSION为当前版本,BUG-REPORT-ADDRESS为bug汇报地址。例如:AC_INIT(main,0.0.1, test@test.com);

b. 随后增加一行:AM_INIT_AUTOMAKE(test, 0.0.1);

c. 在AC_OUTPUT前增加一行:AC_CONFIG_FILES([Makefile])

(文件configure.in完整内容如图2所示)

图2

(3)运行aclocal生成aclocal.m4

(4)运行autoconf生成configure脚本

(5)运行autoheader生成config.h.in文件

(6)创建并编辑Makefile.am

AUTOMAKE_OPTIONS=foreign

#automake提供了三种软件等级:foreign、gnu和gnits,默认等级为gnu,(会检测NEWS、README、AUTHORS和ChangeLog文件)。

#在本例使用foreign等级,它只检测必须的文件。

bin_PROGRAMS=main

#定义要产生的可执行文件名,如果要产生多个执行文件,每个文件名用空格隔开。

main_SOURCES=main.c

#指定用来生成目标的源文件列表

(文件Makefile.am完整内容如图3所示)

图3

(7)运行automake --add-missing生成makefile.in

(8)运行configure脚本生成Makefile

至此,构建完毕,运行make命令可以完成编译过程生成可执行文件main。

autotools入门笔记(一)的更多相关文章

  1. autotools入门笔记(二)——创建和使用静态库、动态库

    带有静态库或者动态库的工程的构建过程与上一节()只包含一个源文件的工程的构建过程是类似的.只是对于复杂的工程,如果包含多个还有源文件的目录时,需要对每个包含源文件的目录执行构建过程,另外创建和使用库文 ...

  2. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  3. ES6入门笔记

    ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...

  4. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  5. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  6. redis入门笔记(2)

    redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...

  7. redis入门笔记(1)

    redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...

  8. OpenGLES入门笔记四

    原文参考地址:http://www.cnblogs.com/zilongshanren/archive/2011/08/08/2131019.html 一.编译Vertex Shaders和Fragm ...

  9. OpenGLES入门笔记三

    在入门笔记一中比较详细的介绍了顶点着色器和片面着色器. 在入门笔记二中讲解了简单的创建OpenGL场景流程的实现,但是如果在场景中渲染任何一种几何图形,还是需要入门笔记一中的知识:Vertex Sha ...

随机推荐

  1. 基于visual Studio2013解决C语言竞赛题之0602最大值函数

     题目

  2. Android 自动编译、打包生成apk文件 4 - 多渠道批量打包

    相关文章列表: < Android 自动编译.打包生成apk文件 1 - 命令行方式> < Android 自动编译.打包生成apk文件 2 - 使用原生Ant方式 > < ...

  3. HDU 3033 分组背包

    给出N个物品.M金钱.W种类 给出N个物品的性质:所属种类,花费.价值 求每一种类物品至少一个的前提下,所能购买到的最大价值 dp[i][k]表示在第i种物品.总花费为k的最大价值 dp[i][k]= ...

  4. 3522: [Poi2014]Hotel( 树形dp )

    枚举中点x( 即选出的三个点 a , b , c 满足 dist( x , a ) = dist( x , b ) = dist( x , c ) ) , 然后以 x 为 root 做 dfs , 显 ...

  5. [转]PostgreSQL事务处理机制

    原文链接:http://blog.chinaunix.net/uid-20726500-id-4040024.html 事务的实现原理可以解读为DBMS采取何种技术确保事务的ACID特性.Postgr ...

  6. Qt 无边框窗体改变大小 完美实现

    近期,做项目用到无边框窗体,令人蛋疼的是无边框窗体大小的改变要像右边框那样,上下左右四周,而且要流畅. 网上也找了些代码,发现居然还要连接到windows事件,这显然不合常理,后来自己新建了demo, ...

  7. WPF Multi-Touch 开发:高效开发模式

    原文 WPF Multi-Touch 开发:高效开发模式 在前几篇文章中已经介绍了触屏操作的多种模式,并对其开发方式也有了进一步了解.细心的朋友应该会发现在上一篇文章中,如果拖动图片过快它会因惯性效果 ...

  8. 新的 Windows Azure 网络安全性白皮书

    下载新的 Windows Azure 网络安全性白皮书. Windows Azure 网络提供了将虚拟机安全连接到其他虚拟机所需的基础结构,以及云和内部部署数据中心之间的网桥. 本白皮书旨在挖掘这些内 ...

  9. c语言,内存字节对齐

    引用:内存字节对齐 写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧. /************* ...

  10. 六大设计原则——单一职责原则【Single Responsibility Principle】

    声明:本文内容是从网络书籍整理而来,并非原创. 用户管理的例子 先看一张用户管理的类图:  再看一眼上面的图,思考:这样合理吗? 这个接口是一个很糟糕的设计! 用户的属性和行为竟然混合在一起!!! 正 ...