GNU Automake 版本(version 1.16.1, 26 February 2018)
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License,
Version 1.3 or any later version published by the Free Software
Foundation; with no Invariant Sections, with no Front-Cover texts,
and with no Back-Cover Texts. A copy of the license is included in
the section entitled “GNU Free Documentation License.”
4 两个例子小程序
本章讲两个例子,一个是假定一个工程已经使用Autoconf来处理并手工编写 Makefile
,现在切换到 Automake来处理;第二个例子是如何从同一套源码中使用不同的参数编译出两个程序。
4.1 简单小程序,几步就搞定
假定我们已经完成了一个软件zardoz
,使用Autoconf
提供一个可扩展的框架,不过 Makefile.in
是专门另行准备的,现在为了完善这部分工作,我们转而使用Automake
。.
第一步就是更新configure.ac
,在AC_INIT
之后添加AM_INIT_AUTOMAKE
:
AC_INIT([zardoz], [1.0])
AM_INIT_AUTOMAKE
...
此时还需要重新生成 configure
文件,在此之前需要告诉 autoconf
如何找到新的使用宏。最简单的方法是使用aclocal
生成 aclocal.m4
1 | $ aclocal |
接下来就要编写文件Makefile.am
了,下面的内容说明我们要安装在bin
目录,还指定了源码并且还有一个Texinfo
文档。
1 | bin_PROGRAMS = zardoz |
最后使用automake --add-missing
就可以生成Makefile.in
了,赞。
4.2 一套源码编译两套可执行程序
OK来看第二个例子,这个例子展示了如何从相同的源码true.c
通过不同的cpp
参数生成两个程序 (true
和 false
) 。
1 | bin_PROGRAMS = true false |
注意例子里面没有 true_SOURCES
,Automake
会自动假定源码名为 true.c
,编译为 true.o
并链接到true
,规则段true.o: true.c
会覆盖默认由 Automake
产生的,使用新的一些规则。
false_SOURCES
置为空,因为没有相应的源码,所以我们需要告诉 Automake
它是如何编译链接的。false_LDADD
给出了方案。
如果编译器不能同时支持 -c
和 -o
,上面的这个文件可能不会工作,此时我们就需要变通一下,使用下面的文件解决:
1 | true.o: true.c false.o |
上面是比较有技巧的处理方法,刚开始的操作,还是希望尽量简化,简单,易于理解,如下所示:
1 | bin_PROGRAMS = false true |