什么是Makefile.am和Makefile.in?
这两个文件大多在开源项目中看到。
他们是什么,他们是如何工作的?
Makefile.am
是一个程序员定义的文件,由automake
用来生成Makefile.in
文件( .am
代表uto m ake)。 通常在源码包中看到的configure
脚本将使用Makefile.in
来生成一个Makefile
。
configure
脚本本身是从一个名为configure.ac
或configure.in
(不build议使用)的程序员定义文件生成的。 我更喜欢.ac
(对于uto c onf),因为它将它从生成的Makefile.in
文件中区分出来,这样我就可以制定一些规则,如make dist-clean
运行rm -f *.in
。 由于它是一个生成的文件,通常不会将其存储在Git,SVN,Mercurial或CVS等版本系统中,而是存储在.ac
文件中。
阅读更多关于GNU Autotools 。 先阅读make
和Makefile
,然后学习automake
, autoconf
, libtool
等。
简单的例子
从http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html无耻地改编,并在Ubuntu 14.04 Automake 1.14.1上testing。
Makefile.am
SUBDIRS = src dist_doc_DATA = README.md
README.md
Some doc.
configure.ac
AC_INIT([automake_hello_world], [1.0], [bug-automake@gnu.org]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_PROG_CC AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([ Makefile src/Makefile ]) AC_OUTPUT
SRC / Makefile.am
bin_PROGRAMS = autotools_hello_world autotools_hello_world_SOURCES = main.c
SRC / main.c中
#include <config.h> #include <stdio.h> int main (void) { puts ("Hello world from " PACKAGE_STRING); return 0; }
用法
autoreconf --install mkdir build cd build ../configure make sudo make install autoconf_hello_world sudo make uninstall
这输出:
Hello world from automake_hello_world 1.0
笔记
-
autoreconf --install
生成几个模板文件,这些文件应该由Git跟踪,包括Makefile.in
。 它只需要第一次运行。 -
make install
安装:- 二进制到
/usr/local/bin
-
README.md
到/usr/local/share/doc/automake_hello_world
- 二进制到
在GitHub上为你尝试一下。
参考 :
Makefile.am – 用户input文件automake
configure.in – 用户input文件autoconf
autoconf从configure.in生成configuration
automake从Makefile.am中生成Makefile.in
configuration从Makefile.in生成Makefile
例如:
$] configure.in Makefile.in $] sudo autoconf configure configure.in Makefile.in ... $] sudo ./configure Makefile Makefile.in