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 不仅免费而且功能强大。FreeBSD 有现成的 package 可以直接安装,或着你也可以自行下载这些软件的源文件回来 DIY。
3. 一个简单的例子
Automake 所产生的 Makefile 除了可以做到程序的编译和连结,也已经把如何产生程序文件 (如 manual page, info 檔及 dvi 檔) 的动作,还有把原始程序包装起来以供散布的动作都考虑进去了,所以原始程序所存放的目录架构最好符合 GNU 的标准惯例,接下来我拿 hello.c 来做为例子。
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 Hat Linux 上,在 FreeBSD 2.2.x 版也可以正确地重新编译。
要注意的是,利用 Autoconf 及 Automake 所产生出来的软件套件是可以在没有安装 Autoconf 及 Automake 的环境上使用的,因为 configure 是一个 shell script,它己被设计可以在一般 Unix 的 sh 这个 shell 下执行。但是如果要修改 configure.in 及 Makefile.am 檔再产生新的 configure 及 Makefile.in 檔时就一定要有 Autoconf 及 Automake 了。
5. 相关讯息
Autoconf 和 Automake 功能十分强大,你可以从它们所附的 info 檔找到详细的用法。你也可以从许多现存的 GNU 软件或 Open Source 软件中找到相关的 configure.in 或 Makefile.am 檔,它们是学习 Autoconf 及 Automake 更多技巧的最佳范例。
这篇简介只用到了 Autoconf 及 Automake 的皮毛罢了,如果你有心加入 Open Source 软件开发的行列,希望这篇檔能帮助你对产生 Makefile 有个简单的依据。其它有关开发 GNU 程序或 C 程序设计及 Makefile 的详细运用及技巧,我建议你从 GNU Coding Standards3 (GNU 编码标准规定) 读起,里面包含了 GNU Makefile 惯例,还有发展 GNU 软件套件的标准程序和惯例。这些 GNU 软件的在线说明文件可以在 http://www.gnu.org/ 这个网站上找到。