在开始试着用 Automake 之前,请先确认你的系统已经安装以下的软体: 1. GNU Automake 2. GNU Autoconf 3. GNU m4 4. perl 5. GNU LiBTool (假如你需要产生 shared library)
我会建议你最好也使用 GNU C/C++ 编译器 、GNU Make 以及其它 GNU 的工具程式来做为开发的环境,这些工具都是属於 Open Source Software不仅免费而且功能强大。假如你是使用Red Hat linux 可以找到所有上述软体的 rpm 档,FreeBSD 也有现成的 package 可以直 接安装,或着你也可以自行下载这些软体的原始档回来 DIY。以下的范例是在 Red Hat linux 5.2 + CLE2 的环境下所完成的。
3. 一个简单的例子
Automake 所产生的 Makefile 除了可以做到程式的编译和连结,也已经把如何产生程式文件(如 manual page, info 档及 dvi 档) 的动作,还有把原始程式包装起来以供散 的动作都考虑进去了,所以原始程式所存放的目录架构最好符合 GNU 的标准惯例,接下来我拿hello.c 来做为例子。
2. 编辑 configure.scan 档,如下所示,并且把它的档名改成configure.in dnl Process this file with autoconf to prodUCe a con figure script. AC_INIT(hello.c) AM_INIT_AUTOMAKE(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 compiler ch aracteristics. dnl Checks for library functions. AC_OUTPUT(Makefile)
6. 最後执行 ./configure , % ./configure creating cache ./config.cache checking for a BSD compatible install... /usr/bin/in stall -c checking whether build environment is sane... yes checking whether make sets ${MAKE}... yes checking for working aclocal... found checking for working autoconf... found checking for working automake... found checking for working autoheader... found checking for working makeinfo... found checking for gcc... gcc checking whether the C compiler (gcc ) works... yes checking whether the C compiler (gcc ) is a cross-co mpiler... no checking whether we are using GNU C... yes checking whether gcc accepts -g... yes updating cache ./config.cache creating ./config.status creating Makefile
make all 产生我们设定的目标,即此范例中的执行档。只打 make 也可以,此时会开始编译原始码,然後连结,并且产生执行档。
make clean 清除之前所编译的执行档及目的档 (object file, *.o)。
make distclean 除了清除执行档和目的档外,也把 configure 所产生的 Makefile也清除掉。
make install 将程式安装至系统中。假如原始码编译无误,且执行结果正确,便可以把程式安装至系统预设的执行档存放路径。假如我们用bin_PROGRAMS 巨集的话,程式会被安装至 /usr/local/bin 这个目录。
make dist 将程式和相关的档案包装成一个压缩档以供散播 (distribution) 。执行完在目录下会产生一个以 PACKAGE-VERSION.tar.gz 为名称的档案。PACKAGE 和 VERSION 这两个变数是根据 configure.in 档中AM_INIT_AUTOMAKE(PACKAGE, VERSION) 的定义。在此范例中会产生 'hello-1.0.tar.gz' 的档案。
make distcheck 和 make dist 类似,但是加入检查包装後的压缩档是否正常。这个目标除了把程式和相关档案包装成 tar.gz 档外,还会自动把这个压 缩档解开,执行 configure,并且进行 make all 的动作,确认编译无误後,会显示这个 tar.gz 档已经预备好可供散播了。这个检查非 常有用,检查过关的套件,基本上可以给任何一个具备 GNU 发展境的人去重新编译。就 hello-1.tar.gz 这个范例而言,除了在 Red
一九九八年是 Open Source 运动风起云涌的一年,许多 Open Source 的软体普遍受到网路上大众的欢迎和使用。感谢所有为 Open Source 奉献的人们,也希望藉由本文能吸引更多的人加入『自由』、『开放』的 OpenSource 行列。
About this document ...
轻轻松松产生 Makefile1
This document was generated using the LaTeX2Html translator Version 98.2 beta6 (August 14th, 1998) Copyright (C) 1993, 1994, 1995, 1996, Nikos Drakos, ComputerBased Learning Unit, University of Leeds.Copyright (C) 1997, 1998, Ross Moore, Mathematics Department,Macquarie University, Sydney.
The command line arguments were: latex2html -split 0 -show_section_numbers automake.tex The translation was initiated by on 1999-02-11