博客
关于我
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/

你可能感兴趣的文章
NodeJs入门知识
查看>>
nodejs包管理工具对比:npm、Yarn、cnpm、npx
查看>>
NodeJs单元测试之 API性能测试
查看>>
nodejs图片转换字节保存
查看>>
nodejs在Liunx上的部署生产方式-PM2
查看>>
nodejs基于art-template模板引擎生成
查看>>
nodejs字符与字节之间的转换
查看>>
NodeJs学习笔记001--npm换源
查看>>
NodeJs学习笔记002--npm常用命令详解
查看>>
nodejs学习笔记一——nodejs安装
查看>>
vue3+Element-plus icon图标无法显示的问题(已解决)
查看>>
NodeJS实现跨域的方法( 4种 )
查看>>
nodejs封装http请求
查看>>
nodejs常用组件
查看>>
nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
查看>>
Nodejs异步回调的处理方法总结
查看>>
NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
查看>>
nodejs支持ssi实现include shtml页面
查看>>
Nodejs教程09:实现一个带接口请求的简单服务器
查看>>
nodejs服务端实现post请求
查看>>