您的位置 首页 主动

主动生成 Makefile 的全过程详解

automake/autoconf 入门作为Linux 下的程序开发人员,大家一定都遇到过Makefile ,用make 命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写

automake/autoconf 入门

作为Linux 下的程序开发人员,咱们一定都遇到过Makefile ,用make 指令来编译自己写的程序确实是很便利。一般情况下,咱们都是手艺写一个简略Makefile ,假如要想写出一个契合自由软件常规的Makefile 就不那么简略了。

在本文中,将给咱们介绍怎么运用autoconf 和automake 两个东西来协助咱们主动地生成契合自由软件常规的Makefile ,这样就能够象常 见的GNU 程序相同,只需运用“./configure” ,“make” ,“make instal” 就能够把程序安装到Linux 体系中去了。这将特别合适想做开放源代码软件的程序开发人员,又或假如你仅仅自己写些小的Toy 程序,那么这 个文章对你也会有很大的协助。

一、Makefile 介绍

Makefile 是用于主动编译和链接的,一个工程有许多文件组成,每一个文件的改动都会导致工程的从头链接,可是不是一切的文件都需求从头编译,Makefile 中纪录有文件的信息,在make 时会决定在链接的时分需求从头编译哪些文件。

Makefile 的主旨便是:让编译器知道要编译一个文件需求依靠其他的哪些文件。当那些依靠文件有了改动,编译器会主动的发现终究的生成文件现已过期,而从头编译相应的模块。

Makefile 的根本结构不是很杂乱,但当一个程序开发人员开端写Makefile 时,常常会置疑自己写的是否契合常规,而且自己写的 Makefile 常常和自己的开发环境相关联,当体系环境变量或途径发生了改变后,Makefile 或许还要跟着修正。这样就造成了手艺书写 Makefile 的许多问题,automake 刚好能很好地协助咱们处理这些问题。

运用automake ,程序开发人员只需求写一些 简略的含有预界说宏的文件,由autoconf 依据一个宏文件生成configure ,由automake 依据另一个宏文件生成Makefile.in , 再运用configure 依据Makefile.in 来生成一个契合常规的Makefile 。下面咱们将具体介绍Makefile 的automake 生成 办法。

二、运用的环境

本文所说到的程序是依据Linux 发行版别:Fedora Core release 1 ,它包含了咱们要用到的autoconf ,automake。

三、从helloworld 下手

咱们从咱们最常运用的比如程序helloworld 开端。

下面的进程假如简略地说来便是:

新建三个文件:

helloworld.c

configure.in

Makefile.am

然后履行:

aclocal; autoconf; automake –add-missing; ./configure; make; ./helloworld

就能够看到Makefile 被发生出来,而且能够将helloworld.c 编译经过。

很简略吧,几条指令就能够做出一个契合常规的Makefile ,感觉怎么呀。

现在开端介绍具体的进程:

1 、建目录

在你的作业目录下建一个helloworld 目录,咱们用它来寄存helloworld 程序及相关文件,如在/home/my/build下:

$ mkdir helloword

$ cd helloworld

2 、 helloworld.c

然后用你自己最喜欢的修正器写一个hellowrold.c 文件,如指令:vi helloworld.c 。运用下面的代码作为helloworld.c 的内容。

int main(int argc, char** argv)

{

printf(Hello, Linux World!\n);

return 0;

}

完成后保存退出。

现在在helloworld 目录下就应该有一个你自己写的helloworld.c 了。

3 、生成configure

咱们运用autoscan 指令来协助咱们依据目录下的源代码生成一个configure.in 的模板文件。

指令:

$ autoscan

$ ls

configure.scan helloworld.c

履行后在hellowrold 目录下会生成一个文件:configure.scan ,咱们能够拿它作为configure.in 的蓝本。

现在将configure.scan 改名为configure.in ,而且修正它,按下面的内容修正,去掉无关的句子:

============================configure.in 内容开端=========================================

# -*- Autoconf -*-

# Process this file with autoconf to produce a configure script.

AC_INIT(helloworld.c)

AM_INIT_AUTOMAKE(helloworld, 1.0)

# Checks for programs.

AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_OUTPUT(Makefile)

============================configure.in 内容完毕=========================================

然后履行指令aclocal 和autoconf ,别离会发生aclocal.m4 及configure 两个文件:

$ aclocal

$ls

aclocal.m4 configure.in helloworld.c

$ autoconf

$ ls

aclocal.m4 autom4te.cache configure configure.in helloworld.c

咱们能够看到configure.in 内容是一些宏界说,这些宏经autoconf 处理后会变成查看体系特性、环境变量、软件有必要的参数的shell 脚本。

autoconf 是用来生成主动装备软件源代码脚本(configure )的东西。configure 脚天性独立于autoconf 运转,且在运转的进程中,不需求用户的干涉。

要生成configure 文件,你有必要告知autoconf 怎么找到你所用的宏。方法是运用aclocal 程序来生成你的aclocal.m4。

aclocal 依据configure.in 文件的内容,主动生成aclocal.m4 文件。aclocal 是一个perl 脚本程序,它的界说是:“aclocal – create aclocal.m4 by scanning configure.ac” 。

autoconf 从configure.in 这个罗列编译软件时所需求各种参数的模板文件中创立configure 。

autoconf 需求GNU m4 宏处理器来处理aclocal.m4 ,生成configure 脚本。

m4 是一个宏处理器。将输入拷贝到输出,一起将宏打开。宏能够是内嵌的,也能够是用户界说的。除了能够打开宏,m4 还有一些内建的函数,用来引证文件,履行指令,整数运算,文本操作,循环等。m4 既能够作为编译器的前端,也能够独自作为一个宏处理器。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/zhudong/297255.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部