automake制作makefile

preview
需积分: 0 1 下载量 124 浏览量 更新于2011-11-30 收藏 114KB DOC 举报
### automake制作makefile #### 一、概述 在软件开发过程中,Makefile 是一种用于自动化构建过程的重要脚本文件,它可以自动管理依赖关系并控制编译过程。然而,手动编写 Makefile 可能非常繁琐且容易出错,尤其是对于大型项目而言。为此,Automake 应运而生,它是一个辅助工具,可以简化 Makefile 的编写过程。通过 Automake,开发者只需维护一个名为 `Makefile.am` 的模板文件,Automake 将根据该模板自动生成最终的 `Makefile`。 本文将详细介绍如何使用 Automake 来生成 Makefile 文件,包括基本的工作流程以及具体步骤中的注意事项。 #### 二、Automake工作流程 1. **autoscan命令生成 configure.scan 文件** 使用 `autoscan` 命令可以生成一个 `configure.scan` 文件,这个文件只是一个模板,需要对其进行编辑并将其重命名为 `configure.in` 文件。 2. **aclocal命令生成 aclocal.m4 文件** 接下来运行 `aclocal` 命令来生成 `aclocal.m4` 文件。此文件包含了宏定义,这些宏定义在后续步骤中会被使用。 3. **autoheader命令生成 config.h.in 文件** 在确保已经生成了 `aclocal.m4` 和 `configure.in` 文件之后,运行 `autoheader` 命令生成 `config.h.in` 文件。这是一个配置文件,用于存放编译时的定义和宏。 4. **autoconf命令生成 configure 文件** 使用 `autoconf` 命令根据 `configure.in` 文件生成 `configure` 脚本。这个脚本通常用于检查系统环境、编译器特性等,并生成适合当前系统的 `Makefile.in` 文件。 5. **创建并编辑 Makefile.am 文件** 在项目的根目录及各个子目录中创建并编辑 `Makefile.am` 文件。这是 Automake 的输入文件,定义了项目的目标文件、源文件、依赖库等信息。 6. **automake命令生成 Makefile.in 文件** 运行 `automake` 命令根据 `Makefile.am` 文件生成 `Makefile.in`。这个文件包含了具体的构建规则和依赖关系。 7. **./configure 命令** 执行 `./configure` 命令根据 `Makefile.in` 生成最终的 `Makefile` 文件。这个文件可以用来编译和安装项目。 #### 三、具体过程详解 1. **修改 configure.in 文件** 在 `configure.in` 文件中,需要添加特定于项目的配置项。例如,在使用 Automake 2.68 版本时,可能需要添加特定的宏或变量,以便正确生成 `configure` 脚本。例如,如果项目名为 `Realtalkcache`,则需要在文件中指定相应的配置项。 2. **编写 Makefile.am 文件** - **根目录下的 Makefile.am 文件** 在根目录下的 `Makefile.am` 文件中,通常需要定义全局性的配置项,如 `AUTOMAKE_OPTIONS` 用于设置 Automake 的选项,`bin_PROGRAMS` 定义要产生的可执行文件名等。 - **子目录下的 Makefile.am 文件** 对于每个子目录,也需要编写相应的 `Makefile.am` 文件。这些文件通常包含更具体的构建规则,例如指定源文件、目标文件、依赖库等。例如,在 `/src` 目录下的 `Makefile.am` 文件中,可能需要定义具体的源文件列表 (`realtalkcache_SOURCES`)、需要链接的库 (`LIBS`)、链接标志 (`realtalkcache_LDFLAGS`) 以及可能需要包含的头文件路径 (`INCLUDES`)。 #### 四、示例代码解析 - **AUTOMAKE_OPTIONS** 此选项用于设置 Automake 的行为。例如,使用 `foreign` 表示遵循较宽松的规则,仅检测必需的文件。 - **bin_PROGRAMS** 定义要产生的可执行文件名。如果项目中有多个可执行文件,可以通过空格分隔列出它们。 - **realtalkcache_SOURCES** 指定构建可执行文件 `realtalkcache` 所需的源文件。如果有多个源文件,同样通过空格分隔列出。 - **LIBS** 列出需要链接的库,例如 `-lzmq` 表示链接 `libzmq.so` 动态库。 - **realtalkcache_LDFLAGS** 指定链接时需要使用的额外链接标志。 - **INCLUDES** 定义编译时需要包含的头文件路径,例如 `-I/include` 表示包含 `/include` 目录下的头文件。 - **realtalkcache_LDADD** 指定需要链接的静态库文件,例如 `/src/foo/libfoo.a` 表示链接 `libfoo.a` 静态库。 通过以上步骤,我们可以有效地利用 Automake 工具来简化 Makefile 的编写过程,使得项目构建更加高效和可靠。
身份认证 购VIP最低享 7 折!
30元优惠券