Autotools基础使用

0. 前言

当前开源项目的标准编译过程已经变成了简单的三部曲:configure/make/make install,使用起来很方便。维护者不在需要考虑不同编译环境的问题,也基本上不需要写太多复杂的Makefile。但是,autotools的工具数量太多,涉及的语言也不少,不可能从头学到尾。

本文以一个完整的例子,一步步建立了一个基本可用的模板工程。后续项目可以直接使用该工程,并且可以逐步完善自己的需求。

1. 工具介绍

  • autoscan: 用来扫描源代码目录生成[configure.scan]文件。
  • aclocal: 根据configure.in文件的内容,自动生成[aclocal.m4]文件。
  • autoheader: 扫描configure.ac中的内容,并确定需要如何生成[config.h.in]。
  • autoconf: 在编译软件包前执行一系列测试,发现系统的特性,使源码可以去适应不同系统的差别,增强可移植性。
  • automake: 根据[Makefile.am]自动构建[Makefile.in]的工具。极大地简化了描述软件包结构及追踪源码间依赖关系的过程。
  • Libtool: 是编译器和链接器的命令行接口,利用它可以方便地产生具有可移植性的静态库和动态链接库。

2. 操作流程

Autotools_Sequence

  1. 调用autoscan脚本,生成[configure.scan]文件,并将该文件重命名为[configure.ac]。
  2. 修改[configure.ac],配置项目需要的各种自动化探测项。
  3. 编写自定义宏,为每个宏提供一个单独的*.m4文件。
  4. 调用aclocal收集[configure.ac]中用到的各种非autoconf的宏,包括自定义宏。
  5. 调用autoheader,扫描[configure.ac]、[acconfig.h],生成默认的[config.h.in]宏定义文件。具体文件名称可以在AC_CONFIG_HEADERS中配置。
  6. 编写[Makefile.am]文件,配置编译目标及其源码组成。
  7. 如果[configure.ac]配置了AC_PROG_LIBTOOL或LT_INIT,需要执行libtoolize –automake –copy –force。
  8. 调用automake –add-miss,将每个Makefile.am转化成[Makefile.in]。
  9. 调用autoconf,利用M4解析[configure.ac],生成configure脚本。

基本上只需要修改红色表示的三个步骤就可以配置好工程,基础例子可以参见:

Basic Project

3. 常用宏

AC_PREREQ

原型:AC_PREREQ(VERSION)
功能:需要的最低autoconf版本

AC_PREREQ([2.65])

AC_INIT

原型:AC_INIT(PACKAGE, VERSION, BUG-REPORT-ADDRESS)
功能:autoconf初始化。告诉autoconf包名称,版本,报告bug的Email

AM_INIT_AUTOMAKE

原型:AM_INIT_AUTOMAKE([OPTIONS…])
功能:初始化automake
参数:

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值