GNU Automake是一种编程工具,可以产生供make程序使用的Makefile,用来编译程序。它是自由软件基金会发起的GNU计划的其中一项,作为GNU构建系统的一部分。automake所产生的Makefile符合GNU编程标准。

Quick Facts 开发者, 当前版本 ...
Automake
Thumb
开发者GNU计划
当前版本1.16.5[1](2021年10月3日,​3年前​(2021-10-03
原始码库 编辑维基数据链接
操作系统跨平台
类型软件开发工具
许可协议GNU通用公共许可证
网站https://www.gnu.org/software/automake/
Close
Thumb
Flow diagram of autoconf and 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,而项目也可以从此可移植的库生成工具获益。

参见

参考资料

外部链接

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.