它们的作用是什么,它们是如何工作的?
#1 楼
Makefile.am
是程序员定义的文件,被automake
用来生成Makefile.in
文件(.am
代表自动制作)。 configure
脚本本身是由程序员定义的文件Makefile.in
或Makefile
(不推荐使用)生成的。我更喜欢configure
(用于autoconf),因为它可以将其与生成的configure.ac
文件区分开来,这样我就可以拥有运行configure.in
的规则,例如.ac
。由于它是生成的文件,因此通常不存储在修订系统(例如Git,SVN,Mercurial或CVS)中,而是Makefile.in
文件。有关GNU Autotools的更多信息。 >先阅读有关
make dist-clean
和rm -f *.in
的信息,然后了解.ac
,make
,Makefile
等。#2 楼
简单示例无害地改编自: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.
配置。 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
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
to /usr/local/share/doc/automake_hello_world
在GitHub上供您试用。
评论
为什么要在VCS下保存生成的文件(不仅可以是Git BTW)?
– Victor Yarema
17年9月18日在18:02
@VictorYarema我忘记了为什么得出这个结论!让我知道你是否发现。
– Ciro Santilli郝海东冠状病六四事件法轮功
17年9月18日在18:05
#3 楼
DEVELOPER运行autoconf
和automake
: br />'autoconf'是宏处理器。 它将使用宏指令的shell脚本configure.ac转换为完全的shell脚本configure。
(配置将在以后读取以制作Makefile)
Automake有助于创建可移植且符合GNU标准的Makefile。从简单的Makefile.ams创建复杂的Makefile.ins
安装程序运行
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
输入/输出MAP
以下符号大致为:输入->程序->输出
autoconf-> configure(script)---(* .ac = autoconf)configure.in-> autoconf-> configure(script)---(
configure.in
已贬值。请使用configure.ac)Makefile.am-> automake-> Makefile.in ------- ----(* .am = automake)
安装程序运行以下命令:
Makefile.in->配置-> Makefile(*。in =输入文件)
Makefile-> make- -- ------->(将新软件放入您的下载文件或临时目录中)Makefile-> make install->(将新软件放入系统目录中)
“ autoconf是M4的可扩展软件包产生外壳程序脚本以自动配置软件源代码包的宏。这些脚本可以使程序包适应许多类UNIX系统,而无需人工干预。 Autoconf通过模板文件为软件包创建配置脚本,该模板文件以M4宏调用的形式列出了软件包可以使用的操作系统功能。“
” automake是一种自动生成与文件兼容的Makefile.in的工具。与GNU编码标准。 Automake需要使用Autoconf。“
手册:
GNU AutoTools(有关此材料的权威性手册)
m4(autoconf使用)
autoconf
automake
免费在线教程:
使用GNU自动工具
>示例:
用于构建LibreOffice的主要configure.ac代码超过12k行,(但是子文件夹中还有57个其他configure.ac文件。)
由此,我生成的configure超过了41k代码行。
尽管Makefile.in和Makefile都只有493行代码。 (但是,子文件夹中还有768个Makefile.in。)
#4 楼
参考:Makefile.am-要自动制作的用户输入文件
autoconf从configure.in生成配置。
automake从Makefile.am继承Makefile.in。例如:
$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ...
$] sudo ./configure
Makefile Makefile.in
评论
所以当您创建dist时,Makefile.in应该位于tar.gz文件中,对吗?
–周克敏
18-10-28在2:38
评论
.in代表什么?
– Utku
16年4月4日在13:13
.in扩展名意味着它是用于配置消息的输入,而不是应使用的最终文件(例如,使用make)。如果您对为什么这看起来“荒谬”复杂感到好奇,请尝试阅读:stackoverflow.com/a/26832773/939557如今,随着GitHub等成为通用发行渠道,autoconf的某些假设正在瓦解:人们正在逐渐直接从源代码控制工具获取源代码,而不使用维护者创建的源代码分发压缩包。
– MadScientist
17-10-13在17:21