博客
关于我
automake介绍
阅读量:289 次
发布时间:2019-03-01

本文共 2354 字,大约阅读时间需要 7 分钟。

前言

本章将介绍如何使用Automake构建项目的Makefile文件,帮助开发者简化构建、测试和安装流程。Automake通过生成标准化的Makefile模板,自动化了传统Makefile的配置管理,适用于跨平台开发。

Automake简介

Makefile的功能可以划分为编译、测试和安装三大部分。然而,手工管理Makefile的变量和规则会随着项目复杂度增加而变得难以管理。Automake作为一个自动化工具,能够根据Makefile.am文件自动生成Makefile模板(Makefile.in),从而简化这一过程。

Automake不仅能够处理编译和安装,还能自动管理跨平台配置,通过脚本替换Makefile中的变量。这种自动化使得Makefile的管理更加高效。然而,Automake的主要价值体现在如何更好地描述构建、测试和安装的流程,而这些过程的核心逻辑并没有改变。

Enabling Automake in configure.ac

为了在项目中启用Automake,我在configure.ac文件中添加了AM_INIT_AUTOMAKE宏。这一步骤不仅启用了Automake,还允许通过选项参数修改其行为。常用的选项包括check-news、dist-*、readme-alpha、-Wcategory、silent-rules等。

例如,check-news选项会确保项目版本信息出现在NEWS文件的前几行,否则make dist将失败。dist-*选项允许指定不同的压缩格式,默认为.tar.gz,但可以更改为.tar.bz2等格式。silent-rules选项则确保Makefile生成时仅输出工具和目标文件的名称。

Makefile.am文件

Makefile.am文件是Automake生成Makefile.in模板的基础文件。其内容包括子目录、目标文件、安装位置、编译选项等配置。Automake会将Makefile.am中的变量和规则置于生成的Makefile.in的适当位置,确保与自动生成的内容兼容。

例如,Makefile.am文件中的SUBDIRS变量指定了项目的子目录,确保Automake能够递归处理这些目录。bin_PROGRAMS变量定义了需要生成的可执行程序,而jupiter_SOURCES则指定了源代码文件。安装位置的配置也通过这些变量实现,例如bin_PROGRAMS表示生成的程序将安装在$(bindir)目录下。

Product List Variables(PLV)

PLV用于定义需要处理的文件类型和安装位置。例如,bin_PROGRAMS = jupiter表示需要生成名为jupiter的可执行程序。安装位置的前缀可以通过这些变量指定,例如$(bindir)表示将文件安装在系统默认的可执行程序目录下。

Automake支持多种安装位置前缀,如$(libdir)、$(includedir)、$(datadir)等。对于以pkg开头的前缀,Automake会将文件安装到相应的软件包目录下。例如,libjupcommon.a将安装在$(libdir)/jupiter/目录下。

Product Source Variables(PSV)

PSV用于指定生成目标产品所需的源文件。例如,jupiter_SOURCES = main.c表示生成jupiter可执行程序需要使用main.c文件。Automake会将这些文件添加到构建规则中。

PSV的值由product和SOURCES两部分组成。product指定了需要处理的文件类型(如程序、库或脚本),SOURCES则列出了具体的源文件路径。Automake会根据这些变量生成相应的Makefile规则。

PLV和PSV Modifiers

Modifiers允许对PLV和PSV的行为进行定制。常用的修饰符包括dist、nobase和notrans。dist修饰符将文件添加到发行包中,nobase保留文件的相对路径信息,而notrans则阻止手册页名称的扩展名转换。

例如,使用dist修饰符可以确保特定文件被包含在分发包中,而nobase修饰符可以防止Automake从Makefile.am中导入子目录的头文件路径信息。这些选项对于定制化构建流程非常有用。

测试脚本

在项目中,我定义了greptest.sh脚本用于测试jupiter程序。check_SCRIPTS变量将该脚本添加到测试目标中,当执行make check时,Automake会自动运行greptest.sh以验证程序输出。

CLEANFILES变量确保了在make clean时能够正确删除测试脚本和相关输出文件。这种自动化测试流程简化了测试配置和维护工作。

便捷库

项目中使用了一个便捷库libjupcommon.a。通过在Makefile.am中定义noinst_LIBRARIES和libjupcommon_a_SOURCES变量,Automake能够自动编译和安装该库。编译器和链接器选项通过jupiter_CPPFLAGS和jupiter_LDADD变量进行配置。

这些变量属于Product Option Variables(POV),用于为特定产品指定编译和链接选项。例如,product_LDFLAGS可以传递静态库或共享库的编译标志。

总结

通过本章的学习,我对Automake有了更深入的理解。它通过自动生成Makefile模板,简化了传统Makefile的配置管理,同时支持跨平台构建需求。通过合理配置Makefile.am文件,开发者可以定义构建、测试和安装流程,减少手动操作的复杂性。

转载地址:http://thta.baihongyu.com/

你可能感兴趣的文章
Python基础——Thread类与线程对象
查看>>
Python基础——Thread创建管理多线程
查看>>
Python基础——SQLite数据库基本操作
查看>>
Python基础——MySQL数据库基本操作
查看>>
Python基础_列表 list
查看>>
python系列【仅供参考】:python异步库调用gevent和asyncio对比
查看>>
python基础3
查看>>
Python基础08 面向对象的基本概念
查看>>
python系列【仅供参考】:python二进制转10进制
查看>>
Python基础-函数篇
查看>>
python基础---->常用模块
查看>>
Python基础(2):控制结构
查看>>
Python基础 | 关于“循环”那些事
查看>>
python系列【仅供参考】:python之subprocess模块rsync拉取文件
查看>>
python系列【仅供参考】:python 远程rdp
查看>>
python基础
查看>>
Python基本语法与变量类型
查看>>
python基本数据类型(容器)- tuple list dict set
查看>>
python基本工资的调整方案_Python薪资又涨了!这可咋办!
查看>>
Python基准测试和性能分析内存管理和垃圾回收
查看>>