398

这两个文件大多出现在开源项目中。

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

4

4 回答 4

429

Makefile.am是程序员定义的文件,用于生成automake文件Makefile.in.am代表自动制作)。通常在源 tarball 中看到的脚本将使用来生成.configureMakefile.inMakefile

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

阅读更多关于GNU Autotools的内容。首先阅读makeMakefile,然后了解automake, autoconf,libtool等。

于 2010-03-28T03:53:58.743 回答
67

简单的例子

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

生成文件.am

SUBDIRS = src
dist_doc_DATA = README.md

自述文件.md

Some doc.

配置.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
autotools_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 上供您试用。

于 2015-05-28T16:17:05.767 回答
34

开发人员运行autoconfautomake

  1. autoconf - 创建可交付的配置脚本
    (安装程序稍后将运行该脚本以生成 Makefile
  1. automake - 创建可交付Makefile.in数据文件
    (稍后将读取该文件以生成 Makefile

安装程序运行configuremake并且sudo 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


输入/输出映射

下面的符号大致是:输入 --> 程序 --> 输出

开发人员运行这些:

configure.ac -> autoconf -> configure (script) --- ( * .ac = a uto conf) configure.in --> autoconf -> configure (script) --- ( depreciated. Use configure.ac)
configure.in

Makefile.am -> automake -> Makefile.in ----------- (* .am =自动制作)

安装程序运行这些:

Makefile.in ->配置-> Makefile (* .in = in = in put file)

Makefile -> make ---------->(将新软件放在您的下载或临时目录中)
Makefile -> make install ->(将新软件放在系统目录中)


" autoconf是一个 M4 宏的可扩展包,它生成 shell 脚本以自动配置软件源代码包。这些脚本可以使包适应多种类 UNIX 系统,而无需用户手动干预。Autoconf 从以 M4 宏调用的形式列出软件包可以使用的操作系统功能的模板文件。”

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

手册:

免费在线教程:


例子:

用于构建 LibreOffice的主要configure.ac代码超过 12k 行,(但在子文件夹中还有 57 个其他 configure.ac 文件。)

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

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

于 2018-02-12T17:47:43.457 回答
19

参考

Makefile.am - 自动制作的用户输入文件

configure.in -- autoconf 的用户输入文件


autoconf 从 configure.in 生成配置

automake 从 Makefile.am 生成 Makefile.in

configure 从 Makefile.in 生成 Makefile

例如:

$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ... 
$] sudo ./configure
Makefile Makefile.in
于 2015-07-07T17:11:57.070 回答