Answers:
Makefile.am
是一个程序员定义的文件,并且用于通过automake
以生成Makefile.in
文件(.am
代表一个 UTO 米 AKE)。configure
通常在源tarball中看到的脚本将使用Makefile.in
生成一个Makefile
。
该configure
脚本本身是由一个程序员定义的文件生成的,该文件名为configure.ac
or或configure.in
(不建议使用)。我喜欢.ac
(为一个反对派ç ONF),因为它从产生它的区别Makefile.in
文件和这样我可以有规则,如make dist-clean
它运行rm -f *.in
。由于它是生成的文件,因此通常不会存储在修订系统(例如Git,SVN,Mercurial或CVS)中,而应该存储在.ac
文件中。
阅读有关GNU Autotools的更多信息。阅读make
和Makefile
第一,然后了解automake
,autoconf
,libtool
,等。
.in
扩展名意味着它是用于输入消息的输入configure
,而不是应使用的最终文件(例如,带有make
)。如果您对为什么这看起来“荒谬”复杂感到好奇,请尝试阅读:stackoverflow.com/a/26832773/939557 如今,随着GitHub等成为常见的发行渠道,autoconf的某些假设正在瓦解:人们正在获得直接从源代码控制工具获取源代码,而不使用维护者创建的源代码分发压缩包。
简单的例子
无耻地改编自: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
自述文件
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上供您试用。
autoconf
并automake
:1)autoconf- 创建可交付使用的配置脚本
(安装程序以后将运行该脚本以生成Makefile)
2)automake-在数据文件中 创建可运送的Makefile.in
(配置将在以后读取以制作Makefile)
configure
,make
并且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
下面的符号大致是:输入->程序->输出
DEVELOPER运行以下命令:
configure.ac - > autoconf的 - > 配置(脚本)---(* AC = 一个反对派ç ONF)
configure.in - > autoconf的 - > 配置(脚本)---(configure.in
折旧使用configure.ac。)
Makefile.am - > 的automake - > Makefile.in -----------(。* 是 = 一个 UTO 米 AKE)
安装程序运行以下命令:
Makefile.in - > 配置 - > 生成文件(* 在 = 在放文件)
Makefile- > make ---------->(将新软件放入您的下载目录或临时目录中)
Makefile- > make install ->(将新软件放入系统目录中)
“ autoconf是M4宏的可扩展程序包,该程序包生成shell脚本以自动配置软件源代码包。这些脚本可以使程序包适应许多类UNIX系统,而无需用户手动干预。Autoconf通过以下方式为程序包创建配置脚本:模板文件,以M4宏调用的形式列出了程序包可以使用的操作系统功能。”
“ automake是一种用于自动生成符合GNU编码标准的Makefile.in文件的工具。Automake需要使用Autoconf。
手册:
免费的在线教程:
用于构建LibreOffice 的主要configure.ac超过12,000行代码,(但子文件夹中还有57个其他configure.ac文件。)
由此我生成的配置超过41k行代码。
而且,尽管Makefile.in和Makefile均为493行代码。(但是,子文件夹中还有768个Makefile.in。)
参考:
Makefile.am-自动输入的用户输入文件
configure.in-要自动配置的用户输入文件
autoconf从configure.in生成configure
automake使Makefile.am中的Makefile.in生效
配置从Makefile.in生成Makefile
例如:
$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ...
$] sudo ./configure
Makefile Makefile.in
.in
?