autotools入门笔记(一)
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入门笔记(一)的更多相关文章
- autotools入门笔记(二)——创建和使用静态库、动态库
带有静态库或者动态库的工程的构建过程与上一节()只包含一个源文件的工程的构建过程是类似的.只是对于复杂的工程,如果包含多个还有源文件的目录时,需要对每个包含源文件的目录执行构建过程,另外创建和使用库文 ...
- 每天成长一点---WEB前端学习入门笔记
WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...
- ES6入门笔记
ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- React.js入门笔记
# React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...
- redis入门笔记(2)
redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...
- redis入门笔记(1)
redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...
- OpenGLES入门笔记四
原文参考地址:http://www.cnblogs.com/zilongshanren/archive/2011/08/08/2131019.html 一.编译Vertex Shaders和Fragm ...
- OpenGLES入门笔记三
在入门笔记一中比较详细的介绍了顶点着色器和片面着色器. 在入门笔记二中讲解了简单的创建OpenGL场景流程的实现,但是如果在场景中渲染任何一种几何图形,还是需要入门笔记一中的知识:Vertex Sha ...
随机推荐
- Windows Phone 8初学者开发—第17部分:Coding4Fun工具包简介
原文 Windows Phone 8初学者开发—第17部分:Coding4Fun工具包简介 第17部分:Coding4Fun工具包简介 原文地址: http://channel9.msdn.com/ ...
- 深入解析MFC -- 句柄与对象的关系
CWnd::FromHandlePermanent ——根据窗口句柄得到CWnd*指针 This function, unlike FromHandle, does not create tempor ...
- [置顶] 使用红孩儿工具箱完成基于Cocos2d-x的简单游戏动画界面
[Cocos2d-x相关教程来源于红孩儿的游戏编程之路CSDN博客地址:http://blog.csdn.net/honghaier 红孩儿Cocos2d-X学习园地QQ3群:205100149,47 ...
- 放开chrome,微度新标签页 删除
来自VIc_:http://blog.csdn.net/Vic___ 本人只是提供方法建议,没有任何商业欲望. 欢迎转载 有一天,突然,我的标签栏,被改变了,这是怎么了,我的书签栏 我是一个镇定的人, ...
- POJ 2528 QAQ段树+分离
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submitcid=58236#statu ...
- Android --Vibrator--震动服务
1.取得震动服务的句柄 vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);或者vibrator = (Vibrator)getAppli ...
- 我的Python成长之路---第二天---Python基础(7)---2016年1月9日(晴)
再说字符串 一.字符串的编码 字符串的编码是个很令人头疼的问题,由于计算机是美国人发明的,他们很理所当然的认为计算机只要能处理127个字母和一些符号就够用了,所以规定了一个字符占用8个比特(bit)也 ...
- js open() 与showModalDialog()方法
此方法可通用,项目开发中经常要用到: //w:宽,h:高,url:地址,tag:标记 function showWin(w, h, url, tag) { var t = (screen.height ...
- 欢迎大家关注我的微信公众帐号小q机器人(xiaoqrobot)(转)
一个偶然的机会让我接触到了微信公众平台,赶紧加了几个交流群了解下相关情况,突然间发现好像全部的APP开发人员都在研究微信公众帐号的开发,而我显得有些落舞了.至于为什么热度会这么高,我想一个数字足以说明 ...
- PS 滤镜算法原理 ——马赛克
% method : 利用邻域的随意一点取代当前邻域全部像素点 %%%% mosaic clc; clear all; addpath('E:\PhotoShop Algortihm\Image Pr ...