`
dato0123
  • 浏览: 970639 次
文章分类
社区版块
存档分类
最新评论

使用Automake和Autoconf生成Makefile

 
阅读更多

automake 所产生的 Makefile 除了可以做到程序的自动编译和链接外,还可以用来生成各种文档(如manual pageinfo文件),可以将源代码文件包装起来以供发布。所以程序源代码所存放的目录结构最好符合GNU的标准惯例。下面以hello.c程序生成Makefile文件作为例子。

1,在当前目录下创建一个名为hello的子目录。hello这个目录用于存放 hello.c这个程序及相关文件。新建一个源程序文件hello.c

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include<stdio.h>

intmain(intargc,char**argv)
{
printf(
"Welcometouseautoconfandautomake/n");
return0;
}

2,执行autoscan命令生成一个名为configure.scan文件:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->autoscan

3,configure.scan改名为configure.in

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->mvconfigure.scanconfigure.in

4,打开configure.in,将该文件修改为以下内容:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#ProcessthisfilewithAutoconftoproduceaconfigurescript.
AC_INIT(hello.c)
AM_INIT_AUTOMAKE(hello,
1.0)
#Checks
forprograms.
AC_PROG_CC
#Checks
forlibraries.
#Checks
forheaderfiles.
#Checks
fortypedefs,structures,andcompilercharacteristics.
#Checks
forlibraryfunctions.
AC_OUTPUT(Makefile)

5,然后执行以下两个命令,分别生成aclocal.m4configure文件:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->aclocal
autoconf

6,新建四个空白文件,分别命名为NEWS,README,AUTHORS,ChangeLog。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->touchNEWS
touchREADME
touchAUTHORS
touchChangeLog

7,创建一个名为Makefile.am的文件,并输入以下内容:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS
=hello
hello_SOURCES
=hello.c

8,执行命令“automake --add-missing”automake 会根据Makefile.am 文件产生一些文件,其中包含最重要的Makefile.in

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->automake--add-missing

9,最后执行“./configure”命令生成Makefile文件

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->./configure

10,生成Makefile文件后,就可以执行“make”命令来编译hello.c程序,从而生成可执行程序hello。生成可执行程序hello后,执行。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->make
.
/hello
Welcometouseautoconfandautomake

归纳一下这个例子的流程。

1)在存放源代码的目录下执行autoscan命令生成configure.scan文件。

2)将configure.scan文件改名为configure.in,并对其默认配置进行修改。

3)执行aclocalautoconf两个命令,分别生成aclocal.m4configure文件。

4)创建一个名为Makefile.am的文件,并输入相应的内容。

5)执行automake --add-missing,它根据Makefile.am文件,生成Makefile.in

6)执行./configure脚本文件,它根据Makefile.in文件,生成最终的Makefile文件。

通过以上步骤,在源代码所在目录下自动生成了Makefile文件。

configure.in文件

autoconf是用来产生“configure”文件的工具。“configure”是一个Shell脚本,它可以自动设定一些编译参数使程序能够在不同平台上进行编译。autoconf读取configure.in 文件然后产生''configure''这个Shell脚本。

configure.in 文件的内容是一系列GNU m4 的宏,这些宏经autoconf处理后会变成检查系统特性的Shell脚本。configure.in文件中宏的顺序并没有特别的规定,但是每一个configure.in 文件必须以宏AC_INIT开头,以宏AC_OUTPUT结束。一般可先用autoscan这个工具扫描原始文件以产生一个configure.scan 文件,再对configure.scan 作些修改,从而生成 configure.in 文件

configure.in 文件中一些宏的含义如下。

l #dnl#dnl后面的内容作为注释不会被处理,它们是注释的起始标志。

l AC_INIT(FILE):该宏用来说明源代码所在路径,如上例中的AC_INIT(hello.c),表明源代码在当前目录下,名为hello.c

l AM_INIT_AUTOMAKE(PACKAGE,VERSION):这个是后面运行automake命令所必需的宏,PACKAGE指明要产生软件的名称,VERSION 是其版本号。

l AC_PROG_CC:检查系统可用的C编译器,若源代码是用C语言编写的就需要这个宏。

l AC_OUTPUT(FILE):设置configure命令所要产生的文件。我们最终期望产生Makefile

这个文件,因此一般将其设置为AC_OUTPUT(Makefile)

在运行automake命令时,还需要一些其他的宏,这些额外的宏由aclocal产生。执行aclocal会产生aclocal.m4文件,如果没有特别的要求,无需修改它。用 aclocal产生的宏将会提示automake如何动作。

另一个重要的文件是Makefile.amautomake根据configure.in中的宏并在perl的帮助下把Makefile.am转成Makefile.in文件。Makefile.am 文件定义所要产生的目标。

Makefile.am文件

Makefile.am文件中几个预定的选项的含义如下所示。

l AUTOMAKE_OPTIONS:它用于设置automake的选项。automake 主要是帮助开发 GNU 软件的人员来维护软件,所以在执行automake 时,会检查目录下是否存在标准GNU软件中应具备的文件,例如“NEWS”“AUTHOR”“ChangeLog”等文件。设置为foreign 时,automake 会改用一般软件的标准来进行检查。

l bin_PROGRAMS:定义要产生的可执行程序的文件名。如果要产生多个可执行文件,每个文件名用空白符隔开。

l hello_SOURCES:定义“hello”这个可执行程序所需要的原始文件。如果“hello”这个程序是由多个原始文件产生的,必须把它所用到的所有原始文件都列出来,并以空白符隔开。假设“hello”还需要“hello.c”“main.c”“hello.h”3个文件,则定义hello_SOURCES= hello.c main.c hello.h。如果定义多个可执行文件,则对每个可执行程序都要定义相应的filename_SOURCES,其中filename为要生成的可执行程序的文件名。

编辑好Makefile.am文件后,就可以使用命令automake --add-missing生成Makefile.in。加上--add-missing这个选项是用来提示automake加入包装一个软件所必需的文件,如果不使用该选项,automake可能会报告缺少了某些文件。automake产生出来的 Makefile.in文件是完全符合GNU Makefile规定的,只要执行 configure这个Shell脚本便可以产生合适的Makefile文件了。

如何使用产生的Makefile文件

执行configure脚本文件所产生的Makefile文件有几个预定的选项可供使用。

l make all:产生设定的目标,即生成所有的可执行文件。使用make也可以达到此目的。

l make clean:删除之前编译时生成的可执行文件及目标文件(形如*.o的中间文件)。

l make distclean:除了删除可执行文件和目标文件以外,把configure所产生的 Makefile文件也清除掉。通常在发布软件前执行该命令。

l make install:将使用make allmake命令产生的可执行文件以软件的形式安装到系统中。若使用bin_PROGRAMS宏,程序将会被安装到 /usr/local/bin下,否则安装到预定义的目录下。

l make dist:将程序和相关的文档包装为一个压缩文档以供发布。执行完该命令,在当前目录下会产生一个名为PACKAGE-VERSION.tar.gz的文件。PACKAGE VERSION 这两个参数是来自configure.in文件中的AM_INIT_AUTOMAKE(PACKAGE,
VERSION)
。如在上个例子中执行make dist命令,会产生名为“hello-1.0.tar.gz”的文件。

l make distcheck:与make dist类似,但是加入了检查包装以后的压缩文件是否正常。

分享到:
评论

相关推荐

    使用Automake,Autoconf生成Makefile

    使用Automake,Autoconf生成Makefile,介绍软件打包发布

    编译利器之大型项目如何使用Automake和Autoconf完成编译配置分享.pdf

    Automake和Autoconf在大型项目中的应用非常广泛,例如在开源C/C++项目中,使用Automake和Autoconf可以快速生成Makefile文件,从而简化编译过程。 使用Automake和Autoconf可以简化编译过程,减少手写Makefile的工作...

    用automake,autoconf生成Makefile文件

    项目project,生成Makefile,要求将lib目录下的swap.c和myadd.c编译成静态库,并将最终生成的可运行程序生成在src目录下。 需要编写三个Makefile.am文件,分别位于lib、src和根目录下。

    运用Autoconf和Automake生成Makefile的学习之路

    使用 Autoconf 和 Automake 生成 Makefile 的步骤 1. Autoscan:在项目目录下执行 autoscan 命令,其中生成一个 configure.scan 的文件。 2. 将 configure.scan 文件更名为 configure.in 文件。 3. 使用 Autoconf ...

    例解 autoconf 和 automake 生成 Makefile 文件

    在软件开发过程中,构建自动化工具对于提高效率和保持一致性至关重要。...通过阅读提供的`例解 autoconf 和 automake 生成 Makefile 文件.htm`和其相关文件,可以深入学习这两个工具的使用方法和实际操作步骤。

    使用AutoMake轻松生成Makefile

    ### 使用AutoMake轻松生成Makefile #### 知识点概览 1. **Makefile的基础概念** 2. **AutoMake的简介与优势** 3. **系统环境准备** 4. **AutoMake工作流程详解** - **步骤1:使用autoscan生成configure.scan文件*...

    AutoMake生成 Makefile

    通过以上步骤,我们不仅创建了一个简单的“Hello World”程序,还使用Automake和Autoconf生成了符合GNU标准惯例的Makefile。这种做法极大地简化了项目构建过程,并提高了项目的可移植性。Automake和Autoconf的结合...

    autoconf 和 automake 生成 Makefile 文件

    要使用`autoconf`和`automake`生成Makefile,首先在项目根目录下运行`autoscan`,生成`configure.scan`文件,然后将其重命名为`configure.in`并进行编辑,定义项目特性和依赖。接下来,创建`Makefile.am`文件,通常...

    automake和autoconf英文手册

    开发者使用autoreconf工具,它会自动调用aclocal、autoheader、automake和autoconf,生成configure脚本和Makefile.in文件。 3. **运行configure** 在目标系统上,用户或构建系统执行configure脚本。这个脚本会...

    automake,autoconf编译大型项目例子

    通过阅读和实践这个例子,你可以学习到如何设置Makefile.am文件,如何定义库和程序的目标,如何使用configure.ac文件来检测系统特性,以及如何使用automake和autoconf生成相应的Makefile和configure脚本。...

    automake和autoconf测试代码

    `automake` 是一个用于生成Makefile.in的工具,这些文件是configure脚本(由autoconf生成)所依赖的,用于构建软件项目。automake遵循GNU标准,确保了项目的构建过程遵循一致性和可移植性。它处理的主要任务包括: ...

    linux下的automake和autoconf.pdf

    以下是一个基本的automake和autoconf的使用步骤: - 首先,创建一个新的项目目录,例如`helloworld`,并在其中放置源代码文件(如helloworld.c)。 - 使用`autoscan`生成configure.in的初始模板。 - 编辑...

    linux c自动生成Makefile

    通过以上步骤,你就可以在Linux环境中使用Automake和Autoconf自动生成C语言项目的Makefile,使得项目管理和维护变得更加高效和便捷。在阅读提供的"Automake,Autoconf自动生成Makefile.pdf"和"自动生成Makefile详细...

    使用AutoMake轻松生成Makefile.doc

    现在,我们可以在 "hello" 目录外运行 Autoconf 和 AutoMake 来生成 configure 脚本和 Makefile: ```bash cd .. autoreconf --install cd hello ./configure make ``` 执行完上述步骤后,你会得到一个可执行的 ...

    多文件多目录例解autoconf和automake生成Makefile文件

    本文将详细介绍如何使用`Autoconf`和`Automake`来处理多文件、多目录的项目结构,以此来生成相应的`Makefile`文件。我们将通过一个具体案例——基于多线程的数据读写保护程序——来进行演示。 #### 二、工具概述 -...

    利用autoconf,automake生成makefile全攻略

    `autoconf` 和 `automake` 是两个常用的开源工具,它们可以帮助开发者自动生成跨平台的 `makefile`,从而简化构建过程。本文将详细介绍如何利用这两个工具为包含多个源文件的项目生成 `makefile`。 首先,我们来看...

    using autotools- automake,autoconf等GNU构建工具使用

    - **简化维护工作**:使用 Automake 和 Autoconf 可以简化项目维护工作。 - **易于更新**:随着工具的更新,维护者可以轻松地更新其项目以利用新功能。 #### 配置过程 配置过程是 Autotools 的核心,它通过一系列...

Global site tag (gtag.js) - Google Analytics