📄 00000002.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: reden (Offer 快快来啊 ~!), 信区: Linux <BR>标 题: 轻轻松松产生 Makefile <BR>发信站: BBS 水木清华站 (Tue Mar 23 12:25:33 1999) <BR> <BR> 轻轻松松产生 Makefile <BR> <BR> <BR> 许明彦 <<A HREF="mailto:myhsu@cyberdude.com>">myhsu@cyberdude.com></A> <BR> <BR> <BR> February 11, 1999 <BR> <BR> <BR> Abstract: <BR> <BR> <BR> 在 Unix 上写程式的人大概都碰过 Makefile,尤其是用 C 来开发程式的 <BR> <BR> 人。用 make 来开发和编译程式的确很方便,可是要写出一个 Makefile <BR> <BR> 就不简单了。偏偏介绍 Makefile 的文件不多,GNU Make 那份印出来要几 <BR> <BR> 百页的文件,光看完 Overview 就快阵亡了,难怪许多人闻 Unix 色变。 <BR> <BR> 本文将介绍如何利用 GNU Autoconf 及 Automake 这两套软体来协助我们 <BR> <BR> 『自动』产生 Makefile 档,并且让开发出来的软体可以像 Apache, <BR> <BR> MySQL 和常见的 GNU 软体一样,只要会 ``./configure'', ``make'', <BR> <BR> ``make install'' 就可以把程式安装到系统中。如果您有心开发 Open <BR> <BR> Source 的软体,或只是想在 Unix 系统下写写程式。希望这份介绍文件能 <BR> <BR> 帮助您轻松地进入 Unix Programming 的殿堂。 <BR> <BR> <BR> 1. 简介 <BR> <BR> <BR> Makefile 基本上就是『目标』(target), 『关连』(dependencies) 和 <BR> <BR> 『动作』三者所组成的一连串规则。而 make 就会根据 Makefile 的规则 <BR> <BR> 来决定如何编译 (compile) 和连结 (link) 程式。实际上,make 可做的 <BR> <BR> 不只是编译和连结程式,例如 FreeBSD 的 port collection 中, <BR> <BR> Makefile 还可以做到自动下载原始程式套件,解压缩 (extract) ,修补 <BR> <BR> (patch),设定,然後编译,安装至系统中。 <BR> <BR> <BR> Makefile 基本构造虽然简单,但是妥善运用这些规则就也可以变出许多不 <BR> <BR> 同的花招。却也因此,许多刚开始学习写 Makefile 时会感到没有规范可 <BR> <BR> 循,每个人写出来的 Makefile 长得都不太一样,不知道从何下手,而且 <BR> <BR> 常常会受限於自己的开发环境,只要环境变数不同或路径改一下,可能 <BR> <BR> Makefile 就得跟着修改。虽然有 GNU Makefile Conventions (GNU <BR> <BR> Makefile 惯例) 订出一些使用 GNU 程式设计时撰写 Makefile 的一些标 <BR> <BR> 准和规范,但是内容很长而且很复杂, 并且经常做些调整,为了减轻程式 <BR> <BR> 设计师维护 Makefile 的负担,因此有了 Automake。 <BR> <BR> <BR> 程式设计师只需写一些预先定义好的巨集 (macro),交给 Automake 处理 <BR> <BR> 後会产生一个可供 Autoconf 使用的 Makefile.in 档。再配合利用 <BR> <BR> Autoconf 产生的自动设定档 configure 即可产生一份符合 GNU Makefile <BR> <BR> 惯例的 Makeifle 了。 <BR> <BR> <BR> 2. 上路之前 <BR> <BR> <BR> 在开始试着用 Automake 之前,请先确认你的系统已经安装以下的软体: <BR> <BR> <BR> 1. GNU Automake <BR> <BR> 2. GNU Autoconf <BR> <BR> 3. GNU m4 <BR> <BR> 4. perl <BR> <BR> 5. GNU Libtool (如果你需要产生 shared library) <BR> <BR> <BR> 我会建议你最好也使用 GNU C/C++ 编译器 、GNU Make 以及其它 GNU 的 <BR> <BR> 工具程式来做为开发的环境,这些工具都是属於 Open Source Software <BR> <BR> 不仅免费而且功能强大。如果你是使用 Red Hat Linux 可以找到所有上述 <BR> <BR> 软体的 rpm 档,FreeBSD 也有现成的 package 可以直接安装,或着你也 <BR> <BR> 可以自行下载这些软体的原始档回来 DIY。以下的范例是在 Red Hat <BR> <BR> Linux 5.2 + CLE2 的环境下所完成的。 <BR> <BR> <BR> 3. 一个简单的例子 <BR> <BR> <BR> Automake 所产生的 Makefile 除了可以做到程式的编译和连结,也已经把 <BR> <BR> 如何产生程式文件 (如 manual page, info 档及 dvi 档) 的动作,还有 <BR> <BR> 把原始程式包装起来以供散 的动作都考虑进去了,所以原始程式所存放 <BR> <BR> 的目录架构最好符合 GNU 的标准惯例,接下来我拿 hello.c 来做为例 <BR> <BR> 子。 <BR> <BR> <BR> 在工作目录下建立一个新的子目录 ``devel'',再在 devel 下建立一个 <BR> <BR> ``hello'' 的子目录,这个目录将作为我们存放 hello 这个程式及其相关 <BR> <BR> 档案的地方: <BR> <BR> <BR> % mkdir devel <BR> <BR> <BR> % cd devel <BR> <BR> <BR> % mkdir hello <BR> <BR> <BR> % cd hello <BR> <BR> <BR> 用编辑器写个 hello.c 档, <BR> <BR> <BR> #include <stdio.h> <BR> <BR> <BR> int main(int argc, char** argv) <BR> <BR> { <BR> <BR> printf(``Hello, GNU!\n''); <BR> <BR> return 0; <BR> <BR> } <BR> <BR> <BR> <BR> 接下来就要用 Autoconf 及 Automake 来帮我们产生 Makefile 档了, <BR> <BR> <BR> 1. 用 autoscan 产生一个 configure.in 的雏型,执行 autoscan 後会产 <BR> <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -