📄 00000002.htm
字号:
即可。我们把巨集及目标 (target) 写在 Makefile.am 档内,Automake <BR> <BR> 读入 Makefile.am 档後会把这一串已经定义好的巨集展开并且产生对应的 <BR> <BR> Makefile.in 档, 然後再由 configure 这个 shell script 根据 <BR> <BR> Makefile.in 产生适合的 Makefile。 <BR> <BR> <BR> <BR> [Figure 1:利用 autoconf 及 automake 产生 Makefile 的流程] <BR> <BR> <BR> 上图中表示在上一节范例中所要用的档案以及产生出来的档案,有星号 <BR> <BR> (*) 者代表可执行档。在此范例中可藉由 Autoconf 及 Automake 工具所 <BR> <BR> 产生的档案有 configure.scan、aclocal.m4、configure、Makefile.in, <BR> <BR> 需要我们加入设定者为 configure.in 及 Makefile.am。 <BR> <BR> <BR> 4.1 编辑 configure.in 档 <BR> <BR> <BR> Autoconf 是用来产生 'configure' 档的工具。'configure' 是一个 <BR> <BR> shell script,它可以自动设定原始程式以符合各种不同平台上 Unix 系 <BR> <BR> 统的特性,并且根据系统叁数及环境产生合适的 Makefile 档或是C 的标 <BR> <BR> 头档 (header file),让原始程式可以很方便地在这些不同的平台上被编 <BR> <BR> 译出来。Autoconf 会读取 configure.in 档然後产生 'configure' 这个 <BR> <BR> shell script。 <BR> <BR> <BR> configure.in 档的内容是一连串 GNU m4 的巨集,这些巨集经过 <BR> <BR> autoconf 处理後会变成检查系统特徵的 shell script。configure.in 内 <BR> <BR> 巨集的顺序并没有特别的规定,但是每一个 configure.in 档必须在所有 <BR> <BR> 巨集前加入 AC_INIT 巨集,然後在所有巨集的最後面加上 AC_OUTPUT 巨 <BR> <BR> 集。我们可先用 autoscan 扫描原始档以产生一个 configure.scan 档, <BR> <BR> 再对 configure.scan 做些修改成 configure.in 档。在范例中所用到的 <BR> <BR> 巨集如下: <BR> <BR> <BR> dnl <BR> <BR> 这个巨集後面的字不会被处理,可视为注解。 <BR> <BR> AC_INIT(FILE) <BR> <BR> 这个巨集用来检查原始码所在的路径,autoscan 会自动产生,我们 <BR> <BR> 不必修改它。 <BR> <BR> AM_INIT_AUTOMAKE(PACKAGE,VERSION) <BR> <BR> 这是使用 Automake 所必备的巨集,PACKAGE 是我们所要产生软体套 <BR> <BR> 件的名称,VERSION 是版本编号。 <BR> <BR> AC_PROG_CC <BR> <BR> 检查系统可用的 C 编译器,如果原始程式是用 C 写的就需要这个巨 <BR> <BR> 集。 <BR> <BR> AC_OUTPUT(FILE) <BR> <BR> 设定 configure 所要产生的档案,如果是 Makefile 的话, <BR> <BR> configure 便会把它检查出来的结果带入 Makefile.in 档然後产生 <BR> <BR> 合适的 Makefile。 <BR> <BR> <BR> 实际上,我们使用 Automake 时,还须要一些其它的巨集,这些额外的巨 <BR> <BR> 集我们用 aclocal 来帮我们产生。执行 aclocal 会产生 aclocal.m4 <BR> <BR> 档,如果没有特别的用途,我们可以不必修改它,用 aclocal 所产生的巨 <BR> <BR> 集会告诉 Automake 怎麽做。 <BR> <BR> <BR> 有了 configure.in 及 aclocal.m4 两个档案後,便可以执行 autoconf <BR> <BR> 来产生 configure 档了。 <BR> <BR> <BR> 4.2 编辑 Makefile.am 档 <BR> <BR> <BR> 接下来我们要编辑 Makefile.am 档,Automake 会根据 configure.in 中 <BR> <BR> 的巨集把Makefile.am 转成 Makefile.in 档。Makefile.am 档定义我们所 <BR> <BR> 要产的目标: <BR> <BR> <BR> AUTOMAKE_OPTIONS <BR> <BR> 设定 automake 的选项。Automake 主要是帮助开发 GNU 软体的人员 <BR> <BR> 维护软体套件,所以在执行 automake 时,会检查目录下是否存在标 <BR> <BR> 准 GNU 软体套件中应具备的文件档案,例如 'NEWS'、'AUTHOR'、 <BR> <BR> 'ChangeLog' 等文件档。设成 foreign 时,automake 会改用一般软 <BR> <BR> 体套件的标准来检查。 <BR> <BR> bin_PROGRAMS <BR> <BR> 定义我们所要产生的执行档档名。如果要产生多个执行档,每个档名 <BR> <BR> 用空白字元隔开。 <BR> <BR> hello_SOURCES <BR> <BR> 定义 'hello' 这个执行档所需要的原始档。如果 'hello' 这个程式 <BR> <BR> 是由多个原始档所产生,必须把它所用到的原始档都列出来,以空白 <BR> <BR> 字元隔开。假设 'hello' 这个程式需要 'hello.c'、'main.c'、 <BR> <BR> 'hello.h' 三个档案的话,则定义 <BR> <BR> <BR> hello_SOURCES= hello.c main.c hello.h <BR> <BR> 如果我们定义多个执行档,则对每个执行档都要定义相对的 <BR> <BR> filename_SOURCES。 <BR> <BR> <BR> 编辑好 Makefile.am 档,就可以用 automake --add-missing 来产生 <BR> <BR> Makefile.in。加上 --add-missing 选项是告诉 automake 顺便帮我们加 <BR> <BR> 入包装一个软体套件所必备的档案。Automake 产生出来的 Makefile.in <BR> <BR> 档是完全符合 GNU Makefile 的惯例,我们只要执行 configure 这个 <BR> <BR> shell script 便可以产生合适的 Makefile 档了。 <BR> <BR> <BR> 4.3 使用 Makefile <BR> <BR> <BR> 利用 configure 所产生的 Makefile 档有几个预设的目标可供使用,我们 <BR> <BR> 只拿其中几个简述如下: <BR> <BR> <BR> make all <BR> <BR> 产生我们设定的目标,即此范例中的执行档。只打 make 也可以,此 <BR> <BR> 时会开始编译原始码,然後连结,并且产生执行档。 <BR> <BR> make clean <BR> <BR> 清除之前所编译的执行档及目的档 (object file, *.o)。 <BR> <BR> make distclean <BR> <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -