这两个文件主要出现在开源项目中。
它们是什么,它们如何运作?
答案 0 :(得分:348)
Makefile.am
是程序员定义的文件,automake
用于生成Makefile.in
文件(.am
代表 a uto的米强> AKE)。
通常在源代码压缩包中看到的configure
脚本将使用Makefile.in
生成Makefile
。
configure
script本身是由程序员定义的文件生成的,该文件名为configure.ac
或configure.in
(不建议使用)。我更喜欢.ac
(对于 a uto c onf),因为它将其与生成的Makefile.in
文件区分开来,这样我就可以拥有如下规则:运行make dist-clean
的{{1}}。由于它是生成的文件,因此通常不会存储在修订系统(如Git,SVN,Mercurial或CVS)中,而是rm -f *.in
文件。
详细了解GNU Autotools。
首先阅读make
和Makefile
,然后了解automake
,autoconf
,libtool
等。
答案 1 :(得分:43)
简单示例
无耻地改编自: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 / 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
On GitHub让你尝试一下。
答案 2 :(得分:14)
Makefile.am - 自动生成的用户输入文件
configure.in - autoconf的用户输入文件
autoconf从configure.in
生成configureautomake从Makefile.am
创建Makefile.inconfigure从Makefile.in生成Makefile
例如:
$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ...
$] sudo ./configure
Makefile Makefile.in
答案 3 :(得分:10)
开发商运行这些:
1) autoconf - 创建可发送的配置脚本(安装程序将运行以生成 Makefile )
2) automake - 创建可发送的 Makefile.in (配置稍后将读取以生成 Makefile )
INSTALLER运行这些:
./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
INPUTS - &gt; 计划 - &gt;输出:
开发商运行这些:
configure.in - &gt; autoconf - &gt; configure (脚本)---(配置。 in 折旧。现在使用configure.ac)
configure.ac - &gt; autoconf - &gt; 配置(脚本)---(*。 ac = a uto c onf)
Makefile.am - &gt; automake - &gt; Makefile.in -----------(*。 am = a uto m ake)
INSTALLER运行这些:
Makefile.in - &gt; 配置 - &gt; Makefile (*。 = 放置文件)
Makefile - &gt; 制作 - &gt; (下载或临时目录中的新软件)
Makefile - &gt; make install - &gt; (将新软件放入系统目录)
“ Autoconf 是一个可扩展的M4宏包,可生成用于自动配置软件源代码包的shell脚本。这些脚本可以使软件包适应多种类UNIX系统而无需用户手动干预。 Autoconf从模板文件为包创建一个配置脚本,该模板文件以M4宏调用的形式列出了包可以使用的操作系统功能。“
“ Automake 是一个自动生成符合GNU编码标准的Makefile.in文件的工具.Automake需要使用Autoconf。”
<强>手册强>
有趣的事实:
用于构建LibreOffice的主要 configure.ac 超过12k行代码(但子文件夹中还有57个其他configure.ac文件。)
由此产生的 configure 超过41k行代码
虽然 Makefile.in 和 Makefile 都只有493行代码。(但是,子文件夹中还有768多个Makefile.in。)