文档库 最新最全的文档下载
当前位置:文档库 › Linux_Make文件的自动生成

Linux_Make文件的自动生成

第23卷 第3期2001年9月

武汉理工大学学报?信息与管理工程版

JOURNA L OF W UT(I NFORMATI ON&MANAGE ME NT E NGI NEERI NG)

V ol.23N o.3

Sept.2001

文章编号:10072144X(2001)0320019203

Linux2Make文件的自动生成

周彩兰1,钮 焱2,王晓宇3,李 明4

(1.武汉理工大学计算机科学与技术学院,湖北武汉 430070;2.湖北工学院现代教育技术中心,湖北武汉 430075;

3.华中科技大学数控中心,湖北武汉 430074;

4.国防科技大学计算机并行处理国家实验室,湖南长沙 410005)

摘 要:Make工具是开发Linux应用程序必须掌握的工具之一,但手工编写Makefile的工作既繁琐又难于符合G NU规范。Linux下的AutoC on f和AutoMake工具可以自动生成Make文件。结合一个简单的例子介绍了两种工具及其宏的用法。

关键词:G NU;Linux;Make文件;软件开发

中图法分类号:TP311.1 文献标识码:A

1 Linux及其开发简介

Linux是一个遵循POSIX标准(Protable Oper2 ating System Interface标准操作系统接口)的免费操作系统,具有BS D和SY S V的扩展特性,简单地说Linux就是运行在微机上的UNIX的一个版本。在Windows占领操作系统的今天,Linux异军突起,它以出色的性能和相对较低的价格成为Windows NT在服务器端最有力竞争者,成为中档服务器的首选操作系统。

因为Linux是PC硬件平台上的类UNIX操作系统,它继承了UNIX系统强大的功能和极佳的稳定性,并降低了对硬件环境的要求。但是同UNIX系统一样,Linux系统对于普通用户来说使用较为困难。系统维护及开发的工作需要较深入的操作系统相关知识,在学习Linux开发过程中,初学者最困惑的可能就是如何编写C程序的Make文件了。

Make是G NU的公用程序,它用来编译和连接多个C语言源程序,它类似Shell Script,但功能更强,是开发G NU软件必须掌握的工具之一。

在执行Make前必须先编写名为Makefile的脚本文件,当Make程序执行时它会依次寻找当前目录下的G NU Makefile或Makefile文件,Make 程序就会按照文件中的描述做相应动作。这时只需要简单地键入Make或Make xxx(xxx为Makefile中定义的标签),Make程序就会按照Makefile的内容编译程序。当然Make自身也可以带参数,关于Make的参数可参见文献[1]。2 Makefile文件中的编译依赖关系

在Makefile文件中,最重要的是定义编译依赖关系,例如编写一个名为foo.c的C程序,编译后的目标文件叫foo.o,我们称foo.o依赖于foo.c。如果foo.c改变,则foo.o必须重新编译(当然一个目标文件可能依赖多个C文件)。

以下是一个Makefile的片段:

CC=gcc

CF LAG S=-02-I

UTI LITY=account averun b finger refriend

All:|S(UTI LITY)

Install:|S(UTI LITY)/home/bbs/bin

Clean:

Rm-fr3.o3.BAK3.log

Refriend:refriend.c

|S(CC)|S(CF LAG S)2o refriend refriend.c

在文件中有“:”的标识符称为标签。例如上面有all,Install,Clean,Refriend等标签,用户可以键入Make xxx来完成标签中的一项动作。如果Make后面没有标签则执行第一个标签,则在上例中是Make all。

上例中还用到了Make公用程序的内建变量,如CC,CF LAG S等用|S标明,关于Make的内建变量可参见文献[1]。笔者将介绍Makefile的自动生成,所以可以暂时不必关心它们。

3 使用AutoC onf和AutoMake产生Makefile 笔者介绍如何利用G NU AutoC onf及Au2 toMake这2套软件来协助自动产生Makefile文件,

收稿日期:2001202213.

作者简介:周彩兰(19642),女,湖南长沙人,武汉理工大学计算机科学与技术学院讲师.

并且让开发出来的软件可以像Apache、MyS Q L和常见的G NU软件一样,只要用“./configure”,“Make”,“Make install”就可以把程序安装到系统中。

Makefile基本上就是目标、关联和动作三者所组成的一连串规则。而Make就会根据Makefile 的规则来决定如何编译和连接程序。Makefile基本构造虽然简单,但许多人刚开始学习写Makefile 时会感到困难,每个人写出来的Makefile都不太一样,不知道从何下手,而且常常会受限于特定的开发环境,只要环境变量不同或路径改一下,可能Makefile就得跟着修改。虽然有G NU Makefile C onventions(G NU Makefile惯例)订出一些使用G NU程序设计时撰写Makefile的一些标准和规范,但是内容很长而且很复杂,并且经常需做些调整。为了减轻程序设计人员维护Makefile的负担,因此有了AutoMake。程序设计人员只需写一些预先定义好的宏(macro),然后交给AutoMake处理后会产生一个可供AutoC on f使用的Makefile.in 文件。再配合利用AutoC onf产生的自动设定文件configure,即可产生一份符合G NU Makefile惯例的Makefile。

下面用hello.c程序来说明Make的用法。

首先在工作目录下建立一个新的子目录“program”,再在program下建立一个“hello”的子目录,这个目录将作为存放hello.c这个程序及其相关文件。

用熟悉的编辑器,如vi编写hello.c程序,程序清单如下:

#include〈stdio.h〉

int main(int argc,char33argv)

{

printf(″AutoMake Is Useful!\n″);

return0;

}

用Autocon f及Automake产生Makefile文件的步骤如下:

用autoscan产生一个con figure.in的原型文件,执行autoscan后会产生一个configure.scan的文件。

将con figure.scan文件改名为con figure.in,然后在编辑器中修改成如下内容:

dnl Process this file with Autocon f to produce a con fig2 ure script.

AC-I NIT(hello.c)

AM-I NIT-AUT OMAKE(hello,1.0)

dnl Checks for programs.

AC-PROG-CC dnl Checks for libraries.

dnl Checks for header files.

dnl Checks for typedefs,structures,and com piler ch aracteristics.

dnl Checks for library functions.

AC-OUTPUT(Makefile)

执行aclocal和Autoconf,分别会产生aclocal. m4及con figure2个文件。

手工编辑Makefile.am文件,内容如下:

AUT OMAKE-OPTI ONS=foreign

bin-PROG RAMS=hello

hello-S OURCES=hello.c

执行AutoMake2add2missing生成Makefile.in输出如下:

[s ome@s ome hello]#AutoMake2add2missing AutoMake:configure.in:installing″./install2sh″

执行./com figure,输出如下:

[s ome@s ome hello]#./con figure

creating cache./config.cache

checking for a BS D com patible install…/usr/bin/in stall2c

checking whether build environment is sane…yes

最后编译和连接hello.c,并产生可执行文件。命令输出如下:

[s ome@s ome hello]#Make

gcc2DPACK AG F=\″hello\″2DVERSI ON=\″1.0 \″2I.2I.2g2022c hello.c

gcc2g2022o hello hello.o

此时就可以运行hello程序。

4 AutoC onf和AutoMake使用的宏介绍

AutoMake读入Makefile.am文件后会把这一串已经定义好的宏展开并且产生对应的Makefile. in文件,然后再由con figure这个Shell脚本程序根据Makefile.in产生适合的Makefile。

AutoC onf是用来产生con figure文件的工具。它是一个Shell脚本,可以自动设定原始程序以符合各种不同平台上UNIX系统的特性,并根据系统参数和环境变量产生合适的Makefile文件或者C语言的头文件,让原始程序可以在不同的平台上编译出来。AutoC onf会读取configure.in文件,然后生成configure脚本文件。在configure.in文件中是一串G NU.m4宏。这些宏以AC-I NIT开始,以AC-OUTPUT结束。可以用autoscan扫描源程序以生成一con figure.scan文件,再将configure. scan填加适当的宏生成configure.in文件。下面

02 武汉理工大学学报?信息与管理工程版 2001年9月

是configure.in 的介绍:

dnl :其后的字不被处理,即后接注释。AC -I NIT (FI LE ):检查源代码所在的路径。

AM -I NIT -AUT OMAKE (PACK AGE ,VER 2SI O N ):使用AutoMake 必须的宏,PACK AGE 是软

件名称,VERSI ON 是版本编号。

AC -PROG -CC :检查系统可用的C 编译器。

AC -OUTPUT (FI LE ):设定con figure 所要生成

的文件,如果是Makefile ,则configure 便会将它检查出来的结果加入到Makefile.in 文件,然后生成合适的Makefile 。

实际上,使用AutoMake 还需要其他的宏,这些额外的宏由aclocal 来生成,执行aclocal 会产生aclocal.m4文件,一般对它不做改动。

有了configure.in 和aclocal.m4文件,就可以执行autocon f 来产生configure 脚本。文件Make 2file.am 的作用是根据configure.in 中的宏定义Makefile 的规则及目标。它使用的宏介绍如下:

AUT OMAKE -OPTI ONS :设定AutoMake 的选

项。AutoMake 主要是帮助开发G NU 软件的人员维护软件套件,所以AutoMake 会检查目录下是否存在标准G NU 软件套件应具备的文件档案,如NEWS 、AUTH OR 、Chang Log 等,上例设为foreign 告诉AutoMake 该用一般软件套件的标准检查。

Bin -PROG RAMS :定义产生的可执行文件名。用空格分隔多个可执行文件。

Hello -S OURCES :定义可执行文件hello 的源程序,用空格分隔多个源程序。如果定义多个可执行文件,则对每个可执行文件都定义filename -S OURCES 宏。

编辑好Makefile.am 文件,就可以执行Au 2

toMake 2adding 2missing 来生成Makefile.in 。add 2missing 选项告诉AutoMake 加入一个G NU 软件套

件所必须的文件。有了Makefile.in 就可以执行configure 脚本来生成合适的Makefile 了。

利用AutoMake 生成的Makefile 有几个预设的目标可以使用。

Make all :产生可执行文件。

Make clean :清除可执行文件和目标文件(3.o )。

Make distclean :除执行Make clean 外还删除Makefile 文件。

Make install :将程序安装到系统中,如果在Makefile.am 中用bin -PROG RAMS 宏,则程序将安

装到/usr/local/bin 目录下。

Make dist :将软件套件压缩到一个以PACK 2AGE 2VERSI ON.tar.gz 为名称的文件。在上例中将生成hello 21.0.tar.gz 。

Make distcheck :除执行Make dist 外还检查压

缩文件是否正常。

5 结束语

用所推荐的方法产生Makefile 的过程与以往自行编写的方式不同,手工编写Makefile 不但烦琐而且不利于软件移植,而使用AutoMake 只需用到一些已经定义好的宏即可自动生成。因此建议尽早舍弃手工编写Makefile 。

Autocon f 和AutoMake 功能十分强大,可以从

它们附带的info 文件中找到更细的用法,也可以从现存的G NU 软件找到con figure.in 及Makefile 的使用技巧。参考文献:

[1] 徐延明,林立志.Linux 编程指南与实例[M].北京:

人民邮电出版社,2000.

[2] Rusling D A ,朱 珂.Linux 编程白皮书[M].北京:

机械工业出版社,2000.

The G eneration of the ”Make ”file in Linux

ZHOU Cai 2lan ,NIU Yan ,WANG Xiao 2yu ,LI Ming

Abstract :Linux is an operation system for netw ork server and it is widely used in China.Therefore it is very useful to develop applica 2tion programs in Linux.”Make ”is one of the necessary tools to develop application programs in Linux.H owever to program the ”Make ”file by hand is com plicated and it is difficult to meet the G UN standard.The ”Make ”file can be generated automatically by using Auto 2C on f and AutoMake in Linux.These tw o developing tools and the usage of their Macro are introduced with an exam ple.K ey w ords :G UN ;Linux ;Make file ;s oftware development

ZH OU C ai 2lan :Lect.;School of C om puter Science &T echnology ,W UT ,Wuhan 430070,China.

[责任编辑:王志全]

1

2第23卷第3期 周彩兰等:Linux 2Make 文件的自动生成

相关文档