1. 下载

http://www.gnu.org/software/software.html

2. 安装

m4-1.4.11.tar.gz

autoconf-2.63.tar.gz

automake-1.9.1.tar.gz

3. autotools五工具

  • aclocal
  • autoscan
  • autoconf
  • autoheader
  • automake

4. autotools使用流程

第一步:手工编写Makefile.am这个文件

第二步:在源代码目录树的最高层运行autoscan。然后手动修改configure.scan文件,并改名为configure.ac/configure.in

第三步:运行aclocal,它会根据configure.ac的内容生成aclocal.m4文件

第四步:运行autoconf,它根据configure.ac和aclocal.m4的内容生成configure这个配置脚本文件

第五步:运行automake –add-missing,它根据Makefile.am的内容生成Makefile.in

第六步:运行configure,它会根据Makefile.in的内容生成Makefile这个文件

5. 流程图

6. 举例

# cat hello.c 

#include <stdio.h>
#include "include/hello.h" int main()
{
puts("hello"); return 0;
}
# cat Makefile.am   //automake使用

SUBDIRS = lib
AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = hello
hello_SOURCES = hello.c
hello_LDADD = lib/libprint.a

AUTOMAKE_OPTIONS为设置automake的选项。automake提供了3种软件等级:

  • foreign //只检测必须的文件
  • gnu //默认级别
  • gnits

SUBDIRS:子目录选项

bin_PROGRAMS:如果多个执行文件, 用空格隔开

hello_SOURCES:”hello”这个可执行程序所需的原始文件。如果”hello”这个程序是由多个源文件所产生, 所有源文件用空格隔开

# cat lib/Makefile.am

noinst_LIBRARIES = libprint.a
libprint_a_SOURCES = print.c ../include/print.h
# ls include

hello.h
print.h

7. 开始使用

# autoscan

生成configure.scan

//修改(软件名称, 版本信息, bug汇报E-mail)
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
//为
AC_INIT(hello, 0.01, [bug@sounos.org])
AM_INIT_AUTOMAKE
AC_PROG_RANLIB

重命名为configure.ac

AC_CONFIG_SCRDIR:宏用来侦测所指定的源码文件是否存在, 来确定源码目录的有效性

AC_CONFIG_HEADER:宏用于生成config.h文件,以便 autoheader 命令使用

AC_PROG_CC:用来指定编译器,如果不指定,默认gcc

AC_CONFIG_FILES:宏用于生成相应的Makefile文件

AC_OUTPUT:用来设定 configure 所要产生的文件,如果是makefile,configure 会把它检查出来的结果带入makefile.in文件产生合适的makefile

# aclocal
# autoconf
# autoheader
# automake --add-missing

Automake工具会根据 configure.in 中的参量把 Makefile.am 转换成 Makefile.in 文件

–add-missing:可以让 Automake 自动添加一些必需的脚本文件

再次运行,可以辅助生成几个必要的文件:

Makefile.am: required file `./NEWS' not found
Makefile.am: required file `./README' not found
Makefile.am: required file `./AUTHORS' not found
Makefile.am: required file `./ChangeLog' not found

解决办法:手动touch

# ./configure
# make

GNU autotools 安装和使用的更多相关文章

  1. Mac下安装MacProt,并GNU autotools的安装和使用 autoconf,automake

    1 MacPort的下载:http://www.macports.org/install.php, 需要安装xCode支持macport 2 安装MacPorts 与其他Mac的软件的安装方式相同,挂 ...

  2. 在 Linux 中使用 Eclipse 和 Gnu Autotools 管理 C/C++ 项目

    在我该系列的之前的所有随笔中,都是采用 Linux 发行版自带的包管理工具(如 apt-get.yum 等)进行软件的安装和卸载,从来没有向大家展示使用源代码自行编译安装软件的方法.但是长期混迹于 U ...

  3. GNU autotools自动生成Makefile 介绍

    一.目的 使用autotools工具来帮助我们自动地生成符合自由软件惯例的makefile(这样就可以像常见的GNU程序一样,只要使用"./configure", "ma ...

  4. Cmake Make makefile GNU autotools

    个人总结 首先makefile是由make来编译,而makefile的生成可以由GUN autotools和CMake来实现,但前者没有CMake的CMakelist.txt直观,所以我们一般用CMa ...

  5. GNU Autotools的使用方法

    手工写Makefile是一件很有趣的事情,对于比较大型的项目,如果有工具可以代劳,自然是一件好事.在Linux系统开发环境中,GNU Autotools 无疑就充当了这个重要角色.(在Windows系 ...

  6. 使用 GNU autotools 改造一个软件项目

    使用 GNU autotools 改造一个软件项目 及永刚 jungle@soforge.com 2006 年 3 月 24 日  版本:0.3 本文不是一篇规范的教程,而是用一个软件项目作为例子,演 ...

  7. GNU Autotools的研究(转)

    最近对Linux下软件项目的构建过程研究了一番.Linux下的软件项目通常用Autotools工具集和make工具来构建,我们通常使用./configure.make.make install这样的命 ...

  8. GNU Radio安装教程: Ubuntu14.04 + uhd3.10.0 + gnuradio3.7.10.1

    1. 更新和安装依赖项 在编译安装uhd和gnuradio之前,确保已安装所需依赖项.Ubuntu系统运行: sudo apt-get update 安装UHD和GNURadio所需依赖项: On U ...

  9. 转载几篇关于GNU autotools的文章

    http://www.laruence.com/2009/11/18/1154.html http://www.ibm.com/developerworks/cn/linux/l-makefile/ ...

随机推荐

  1. Java高级——泛型

    本文主要讲述泛型的使用 1.在集合中的使用 2.自定义泛型类.泛型接口.泛型方法 3.泛型与继承的关系 4.通配符 由于第一点和第二点在平常的编码工作中已熟练,本文重点讲述后面两点. 直接show t ...

  2. Zookeeper注册中心搭建-单机版(三)

    Zookeeper是一个分布式协调组件,本质是一个软件. Zookeeper常用的功能有: 发布订阅功能,把 zookeeper 当作注册中心的原因. 分布式/集群管理功能 Zookeeper是Jav ...

  3. Media Formatters(媒体格式化器)

    6.1.1 Internet的媒体类型 媒体类型,也叫做MIME类型,标识了数据的格式.在HTTP中,媒体类型描述了消息体的格式.一个媒体类型由两个字符串组成:类型和子类型.例如: text/html ...

  4. bikemanager

    项目特色 前言的技术栈  健全的架构  丰富的UI组件  共享单车项目 掌握react全家桶 掌握地图和react集成技能 掌握前端图标开发技巧 掌握antd UI框架 前端后台架构设计,公共机制封装 ...

  5. phoenix hbase Can't get master address from ZooKeeper; znode data == null

    问题描述: 项目一直在用的hbase节点  简称h1 由于网络问题,无法使用,重新找了一个网络稳定的节点  z1作为新的hbase库,库名称hbase_test,zookeeper等都配置好后,通过j ...

  6. 企业级Nginx负载均衡与keepalived高可用实战(一)Nginx篇

    1.集群简介 1.1.什么是集群 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器. ...

  7. Visual Studio 调试系列8 查找导致程序崩溃的 DLL(使用模块窗口)

    系列目录     [已更新最新开发文章,点击查看详细] 如果应用程序在调用系统 DLL 或他人的代码时崩溃,则需要找出在崩溃发生时处于活动状态的 DLL. 如果在自己的程序之外的 DLL 中遇到崩溃, ...

  8. C#自定义特性的使用

    特性类的使用过程: 第一步:定义一个特性类,定义一些成员来包含验证时需要的数据:第二步:创建特性类实例:创建一个特性类的实例,里面包含着验证某一个属性或者字段需要的数据.将该实例关联到某个属性上面.第 ...

  9. 别傻傻不知道 == 和 equals 的区别【面试系列】

    ​ 关于这个问题,一般初中级面试中都会遇到,还记得我当初实习找工作的时候也遇到了这个问题,现在都还记得自己是怎么回答的:== 是基本类型比较,equals 是对象比较,不懂 hashCode,想起来简 ...

  10. 第30课 线程同步(std::condition_variable)

    一. 条件变量 (一)条件变量概述 多线程访问一个共享资源(或称临界区),不仅需要用互斥锁实现独享访问避免并发错误,在获得互斥锁进入临界区后,还需检查特定条件是否成立.当某个线程修改测试条件后,将通知 ...