GNU Automake是一种编程工具,可以产生供make程式使用的Makefile,用来编译程式。它是自由软体基金会发起的GNU计划的其中一项,作为GNU构建系统的一部分。automake所产生的Makefile符合GNU编程标准。
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。
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.