Automake
GNU Automake是一种编程工具,可以产生供make程序使用的Makefile,用来编译程序。它是自由软件基金会发起的GNU计划的其中一项,作为GNU构建系统的一部分。automake所产生的Makefile符合GNU编程标准。
开发者 | GNU计划 |
---|---|
当前版本 | 1.16.5[1](2021年10月3日 ) |
源代码库 | |
操作系统 | 跨平台 |
类型 | 软件开发工具 |
许可协议 | GNU通用公共许可证 |
网站 | https://www.gnu.org/software/automake/ |
automake是由Perl语言所写的,必须和GNU autoconf一并使用。automake包含了以下命令:
- aclocal
- automake
aclocal是个泛用的程序,对于autoconf用户是相当有用的。举例而言,GNU Compiler Collection使用aclocal,即使Makefile是手写的。
就像autoconf,automake并非完全向下兼容的。举例而言,使用automake 1.4的项目可能不能使用automake 1.9。
方法
编辑Automake目标是让用户透过高级语言来写makefile,而不是透过纯手工的方式来写整个makefile。在简单的情况下,它能提供:
经由这些信息,Automake产生makefile能够让用户:
- 编译程序
- clean(清除,删除编译过程中所产生的文件)
- 将程序安装于标准路径
- 将程序反安装(从安装的地方移除)
- create a source distribution archive (commonly called a tarball)
- test that this archive is self-sufficient, and in particular that the program can be compiled in a directory other than the one where the sources are deployed
依存性信息的产生
编辑Automake能够自动生成依存性的信息,因此,当一个源文件被修改,下次调用make命令的时候就会知道哪些源文件需要重新编译。如果编译器允许,Automake会试着让依存性系统保持动态:无论何时源文件被编译,都会要求编译器重新产生依存性列表更新该文件的依存性。换句话说,依存性追踪是编译过程的一种边际效应。
这企图避免一些静态依存性系统的问题,比如依存性只会在程序员开始项目时才会被侦测到。在这种情况下,如果源文件获得一个新的依存性(例如,如果程序员增加了一个新的#include
指令在C语言的源文件),这样在真实的依存性和编译系统所使用的依存性之间就会产生差异。程序员应该重新产生依存性,但很有可能忘了那样做。在一般情况下,automake透过随附的depcomp脚本生成依存性,这会适当的调用编译器或是回到makedepend。如果gcc编译器的版本够新的话,automake将会inline依存性生成码,直接调用gcc。
Libtool
编辑Automake还可用来辅助库的编译,它可以自动生成调用Libtool的Makefile文件,从而使程序员避免了直接调用Libtool,而项目也可以从此可移植的库生成工具获益。
参见
编辑参考资料
编辑- Gary V. Vaughan, Ben Elliston, Tom Tromey: Gnu Autoconf, Automake, and Libtool, Sams, ISBN 1-57870-190-2
- ^ Jim Meyering. automake-1.16.5 released [stable]. [2021-10-03]. (原始内容存档于2021-10-04).
外部链接
编辑- Automake home page
- Online version of The Goat Book aka Autobook(页面存档备份,存于互联网档案馆)
- Autotoolset home page(页面存档备份,存于互联网档案馆)
- Article "Using Automake and Autoconf with C++" by Murray Cumming
教材
编辑- Tutorial for beginners "Autotools Tutorial" by Sarah George
- Tutorial "Learning Autoconf and Automake" by Eleftherios Gkioulekas
- The "Autotools Tutorial(页面存档备份,存于互联网档案馆)" by Alexandre Duret-Lutz introduces Autoconf, Automake, Libtool, and Gettext.
- Learning the GNU Development tools(页面存档备份,存于互联网档案馆)