博客
关于我
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制作一个简单的服务器,【Python】 做一个简单的 http 服务器
查看>>
Python到底能做什么?它的优点在哪?
查看>>
python利用pytorch库导出图像分割算子
查看>>
python利用pyshark监听网卡来抓包其中pyshark中摸索的一些可用参数
查看>>
python利用excel分析过杀漏失
查看>>
python判断汉字数目
查看>>
python判断文件是空的,如果是空的,就删除
查看>>
python判断密码是否正确_python密码判断是否符合要求的方法
查看>>
python判断字符串包含中文_Python 判断字符串是否包含中文
查看>>
python删除第一行_Python 乱码指北:一行删掉根目录
查看>>
Python删除列表元素的三种方法
查看>>
python初步学习-python数据类型-集合(set)
查看>>
python列表生成字典_Python中将字典转换为列表的方法
查看>>
python列表对应元素合并为列表及判断一个列表是几维
查看>>
python+flask计算机毕业设计骨科门诊患者档案管理系统(程序+开题+论文)
查看>>
python+flask计算机毕业设计高校体测管理系统的设计与实现(程序+开题+论文)
查看>>
python+flask计算机毕业设计高校体育赛事系统(程序+开题+论文)
查看>>
python+flask计算机毕业设计高校危化品管理系统(程序+开题+论文)
查看>>
python+flask计算机毕业设计高校校园线上跳蚤市场的系统设计(程序+开题+论文)
查看>>
python+flask计算机毕业设计高校疫情防控管理平台(程序+开题+论文)
查看>>