什么是Makefile。am和Makefile.in?

这两个文件主要出现在开源项目中。

它们的作用是什么?它们是如何工作的?

236724 次浏览
Makefile.am是一个程序员定义的文件,由automake用来生成Makefile.in文件(.am代表一个utoake)。 通常在源tarball中看到的configure脚本将使用Makefile.in来生成Makefile.

configure脚本本身是从一个名为configure.acconfigure.in(已弃用)的程序员定义的文件生成的。我更喜欢.ac(对于一个utoconfigure.ac0onf),因为它将其与生成的Makefile.in文件区分开来,这样我就可以拥有运行rm -f *.inmake dist-clean之类的规则。由于它是一个生成的文件,它通常不会存储在修订系统中,如Git、SVN、Mercurial或CVS,而会存储在.ac文件中。

阅读更多关于GNU Autotools。 首先阅读makeMakefile,然后学习automakeautoconflibtool

简单的例子

无耻地改编自:http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html,并在Ubuntu 14.04 Automake 1.14.1上测试。

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 / 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
autotools_hello_world
sudo make uninstall

这个输出:

Hello world from automake_hello_world 1.0

笔记

  • autoreconf --install生成几个模板文件,Git应该跟踪这些文件,包括Makefile.in。它只需要第一次运行。

  • < p > make install安装:

    • /usr/local/bin的二进制
    • README.md/usr/local/share/doc/automake_hello_world

GitHub上为您尝试它。

参考:

Makefile。Am—一个用户输入文件自动制作

配置。在——用户输入文件到autoconf


Autoconf从configure.in生成configure

automake生成Makefile。从Makefile.am进入

configure从Makefile.in生成Makefile

为例:

$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ...
$] sudo ./configure
Makefile Makefile.in

DEVELOPER运行autoconfautomake:

  1. autoconf——创建可移植的配置脚本 (安装程序稍后将运行创建Makefile)
  1. automake -创建可装载的Makefile.in数据文件 (该配置稍后将生成Makefile)

安装程序运行configuremakesudo make install:

./configure       # Creates  Makefile        (from     Makefile.in).
make              # Creates  the application (from the Makefile just created).


sudo make install # Installs the application
#   Often, by default its files are installed into /usr/local


输入/输出地图

下面的符号大致如下:输入->项目——比;输出

DEVELOPER运行这些:

< p >配置。交流→autoconf配置 (script)——(*.)交流 = 一个utoconf)
配置。——比;autoconf配置 (script)——(configure.in贬值。使用configure.ac) < / em >

Makefile。我→automake→Makefile。在----------- (*.) = 一个utoake)

安装程序运行这些:

Makefile。在→配置Makefile(*。 = put文件)

< p > Makefile使 ----------& gt;(将新软件放在下载或临时目录中)
Makefile < / em >→制作安装→(将新软件放到系统目录中)


autoconf是一个可扩展的M4宏包,它生成shell脚本来自动配置软件源代码包。这些脚本可以使包适应多种类unix系统,而无需用户手动干预。Autoconf从模板文件中为包创建配置脚本,该模板文件列出了包可以使用的操作系统特性,以M4宏调用的形式。

automake是一个自动生成Makefile的工具。在符合GNU编码标准的文件中。Automake需要使用Autoconf."

手册:

免费在线教程:


< >强的例子:< / >强

配置。ac用于构建LibreOffice超过12k行代码,(但也有57个其他配置。Ac文件在子文件夹。)

由此我生成的configure超过41k行代码。

Makefile。在Makefile中都只有493行代码。(但是,还有768个Makefile。In在子文件夹中。)