Makefile 生成工具之autotools

一、安装autotools工具

  1. sudo apt-get install automake
  2. sudo apt-get install autoconf

二、autotools是系列工具, 它主要由autoconf、automake、perl语言环境和m4等组成;所包含的命令有五个 :

  • aclocal
  • autoscan
  • autoconf
  • autoheader
  • automake

  1.autoscan

  它会在给定目录及其子目录树中检查源文件,若没有给出目录,就在当前目录及其子目录树中进行检查。它会搜索源文件以寻找一般的移植性问题并创建一个文件“configure.scan”,该文件就是接下来autoconf要 用到的“configure.in”原型。如下所示:

[[email protected] automake]# autoscan

autom4te: configure.ac: no such file or directory

autoscan: /usr/bin/autom4te failed with exit status: 1

[[email protected] automake]# ls

autoscan.log  configure.scan  hello.c

  如上所示,autoscan首先会尝试去读入“configure.ac”(同configure.in的配置文件)文件,此时还没有创建该配置文件,于是它会自动生成一个“configure.in”的原型文件“configure.scan”。

  2.autoconf

  configure.in是autoconf的脚本配置文件,它的原型文件“configure.scan”如下所示:

1 #                                               -*- Autoconf -*-2
3 # Process this file with autoconf to produce a configure script.
4
5 AC_PREREQ(2.59)
6
7 #The next one is modified by sunq
8
9 #AC_INIT(FULL-PACKAGE-NAME,VERSION,BUG-REPORT-ADDRESS)
10
11 AC_INIT(hello,1.0)
12
13 # The next one is added by sunq
14
15 AM_INIT_AUTOMAKE(hello,1.0)
16
17 AC_CONFIG_SRCDIR([hello.c])
18
19 AC_CONFIG_HEADER([config.h])
20
21 # Checks for programs.
22
23 AC_PROG_CC
24
25 # Checks for libraries.
26
27 # Checks for header files.
28
29 # Checks for typedefs, structures, and compiler characteristics.
30
31 # Checks for library functions.
32
33 AC_CONFIG_FILES([Makefile])
34
35 AC_OUTPUT

  下面对这个脚本文件进行解释:

  • 以“#”号开始的行为注释。
  • AC_PREREQ宏声明本文件要求的autoconf版本,如本例使用的版本2.59。
  • AC_INIT宏用来定义软件的名称和版本等信息,在本例中省略了BUG-REPORT-ADDRESS,一般为作者的e-mail。
  • AM_INIT_AUTOMAKE是笔者另加的,它是automake所必备的宏,也同前面一样,PACKAGE是所要产生软件套件的名称,VERSION是版本编号。
  • AC_CONFIG_SRCDIR宏用来侦测所指定的源码文件是否存在,来确定源码目录的有效性。在此处为当前目录下的hello.c 。
  • AC_CONFIG_HEADER宏用于生成config.h文件,以便autoheader使用。
  • AC_CONFIG_FILES宏用于生成相应的Makefile文件。
  • 中间的注释间可以添加分别用户测试程序、测试函数库、测试头文件等宏定义。

  接下来首先运行aclocal,生成一个“aclocal.m4”文件,该文件主要处理本地的宏定义。如下所示:

[[email protected] automake]# aclocal

  再接着运行autoconf,生成“configure”可执行文件。如下所示:

[[email protected] automake]# autoconf

[[email protected] automake]# ls

aclocal.m4  autom4te.cache  autoscan.log  configure  configure.in  hello.c

  3.autoheader

   接着使用autoheader命令,它负责生成config.h.in文件。该工具通常会从“acconfig.h”文件中复制用户附加的符号定义,因此此处没有附加符号定义,所以不需要创建“acconfig.h”文件。如下所示:

[[email protected] automake]# autoheader

  4.automake

   这一步是创建Makefile很重要的一步,automake要用的脚本配置文件是Makefile.am,用户需要自己创建这个文件。之后,automake工具将其转换成Makefile.in。
      在该例中,创建的文件为Makefile.am如下所示:

AUTOMAKE_OPTIONS=foreign

bin_PROGRAMS= hello

hello_SOURCES= hello.c hello.h

  下面对该脚本文件的对应项进行解释。

  • 其中的AUTOMAKE_OPTIONS为设置automake的选项。由于GNU(在第1章中已经有所介绍)对自己发布的软件有严格的规范,比如必须附带许可证声明文件COPYING等,否则automake执行时会报错。automake提供了三种软件等级:foreign、gnu和gnits,让用户选择采用,默认等级为gnu。在本例使用foreign等级,它只检测必须的文件。
  • bin_PROGRAMS定义要产生的执行文件名。如果要产生多个执行文件,每个文件名用空格隔开。
  • hello_SOURCES定义“hello”这个执行程序所需要的原始文件。如果”hello”这个程序是由多个原始文件所产生的,则必须把它所用到的所有原始文件都列出来,并用空格隔开。例如:若目标体“hello”需要“hello.c”、“sunq.c”、“hello.h”三个依赖文件,则定义hello_SOURCES=hello.c sunq.c hello.h。

  接下来可以使用automake对其生成“configure.in”文件,在这里使用选项“—adding-missing”可以让automake自动添加有一些必需的脚本文件。如下所示:

[[email protected] automake]# automake --add-missing

configure.in: installing ‘./install-sh‘

configure.in: installing ‘./missing‘

Makefile.am: installing ‘depcomp‘

[[email protected] automake]# ls

aclocal.m4      autoscan.log  configure.in  hello.c     Makefile.am  missing

autom4te.cache  configure     depcomp    install-sh  Makefile.in  config.h.in

  可以看到,在automake之后就可以生成configure.in文件。

  5.运行 configure

时间: 2024-12-17 11:27:58

Makefile 生成工具之autotools的相关文章

C/C++ makefile自动生成工具(comake2,autotools,linux),希望能为开源做点微薄的贡献!

序 在linux下C或C++项目开发,Makefile是必备的力气,但是发现手写很麻烦. 在百度有个comake2工具,用于自动生成Makefile工具,而在外边本想找一个同类工具,但发现很难做到,只发现有个类似的智能生成工具autotools,但是操作比较麻烦,奔着“一人学习,大家共享”的原则,手动写了一个工具类,帮助自己和大家生成现成的c或者cpp框架. 代码比较简单,希望我们能一起改善下. git路径:https://github.com/chuanshanjia/ccpp/blob/ma

Makefile自动生成工具-----autotools的使用(详细)

相信每个学习Linux的人都知道Makefile,这是一个很有用的东西,但是编写它是比较复杂,今天介绍一个它的自动生成工具,autotools的使用.很多GNULinux的的软件都是用它生成Makefile的,包括我们非常熟悉的Linux内核源代码. 1.准备: 需要工具 autoscan aclocal autoheader automake autoconf auto make 在终端敲入命令,哪个没有安装哪个,一般是第一个autoscan没有,其它的我用的Ubuntu10.04下全部都有

SQL Server2005+、MySQL、Oracle 数据库字典生成工具

之前找的数据库字典生成工具基本上都依赖于 Office Com 组件,在不安装 Office的情况下无法使用.怒,于是自己用C# 写了一个. 特征如下:    一.支持的数据库 MS SQL Server 2005+.My Sql.Oracle    二.支持的文档类型 Html.CHM.Docx    三.无需安装Office即可生成 Docx 格式的Word文件    四.基于 .net framework 3.5 框架,电脑上需要安装 .net framework 3.5.       

数据字典生成工具之旅(8):SQL查询表的约束默认值等信息

上一篇代码生成工具里面已经用到了读取表结构的SQL,这篇将更加详细的介绍SQL SERVER常用的几张系统表和视图! 阅读目录 系统表视图介绍 实际应用 本章总结 工具源代码下载 学习使用 回到顶部 系统表视图介绍 1.sys.tables(用户表) SELECT name,object_id FROM sys.tables 上面SQL是用来查询数据库里面所有用户创建的表,name为表名,object_id为表的对象id.其中object_id的值也可以用系统函数OBJECT_ID()来取 SE

Data Url生成工具之HTML5 FileReader实现

百度经验版本:如何用HTML5的FileReader生成Data Url 上一篇讲了:用Visual Studio 2010编写Data Url生成工具C#版 今天用HTML5 FileReader实现了一下Data Url生成工具,上代码吧: <!DOCTYPE html <html xmlns="http://www.w3.org/1999/xhtml" > <head> <meta http-equiv="Content-Type&q

DBImport v3.3 中文版发布:数据库数据互导及文档生成工具(IT人员必备)

前言: 好久没写文了, 距离上一篇文章是3个月前的事了,虽然工作很忙,主要还是缺少写作的内容和激情,所以没怎么动手. 之前有一个来月不断面试不同层次来应聘的人员,很有想写文的冲动,后来还是忍住了. 估计写了也是那种说人坏话.恨铁不成钢的情绪文,没啥营养,所以情绪过了就没想写了. 在公司除了管理上的事情之外,另外也研发了一套适用信息系统的快速开发框架,这个有机会再写写文和大伙分享了. 下面言归正文了. 背景: 关于这个DBImport工具,发布的版本不多,仅有:V1.0.V2.0.V3.0.V3.

使用Objective-C的文档生成工具:appledoc

前言 做项目的人多了,就需要文档了.今天开始尝试写一些项目文档.但是就源代码来说,文档最好和源码在一起,这样更新起来更加方便和顺手.象 Java 语言本身就自带 javadoc 命令,可以从源码中抽取文档.今天抽空调研了一下 objective-c 语言的类似工具. 从 stackoverflow 上找到三个比较 popular 的工具:doxygen, headdoc 和 appledoc .它们分别的官方网址如下: docxygen http://www.stack.nl/~dimitri/

文档生成工具doxygen+图像生成工具GraphViz

文档生成工具doxygen+图像生成工具GraphViz 虽然jdk自带的javadoc也很好用,不过使用doxygen+GraphViz 的组合可以生成许多强大的图(类图.协作图.文件包含/被包含图.函数调用/被调用图.类继承体系图等),另外,doxygen支持直接生成chm文档,支持LaTeX公式,如果你有一个支持php的服务器,生成的html还可以加入一个搜索框. doxygen是开源的C语言软体,可以在它的官方网站上下载到软体和源码:http://www.stack.nl/~dimitr

数据字典生成工具之旅(5):DocX组件读取与写入Word

由于上周工作比较繁忙,所以这篇文章等了这么久才写(预告一下,下一个章节正式进入NVelocity篇,到时会讲解怎么使用NVelocity做一款简易的代码生成器,敬请期待!),好了正式进入本篇内容. 这篇会介绍DocX读写WORD,DocX组件功能强大,可以很容易的读写WORD,相对于NPOI强大很多,性能也好很多,做这个工具之所以会选择这个组件,主要是看重该组件的表格合并功能. 阅读目录 使用模版生成简历 读写表格数据 合并单元格 工具源代码下载 学习使用 回到顶部 使用模版生成简历 下面将以一