这两个文件通常在开源项目中可见。

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

#1 楼

Makefile.am是程序员定义的文件,被automake用来生成Makefile.in文件(.am代表自动制作)。
configure脚本本身是由程序员定义的文件Makefile.inMakefile(不推荐使用)生成的。我更喜欢configure(用于autoconf),因为它可以将其与生成的configure.ac文件区分开来,这样我就可以拥有运行configure.in的规则,例如.ac。由于它是生成的文件,因此通常不存储在修订系统(例如Git,SVN,Mercurial或CVS)中,而是Makefile.in文件。

有关GNU Autotools的更多信息。 >先阅读有关make dist-cleanrm -f *.in的信息,然后了解.acmakeMakefile等。

评论


.in代表什么?

– Utku
16年4月4日在13:13

.in扩展名意味着它是用于配置消息的输入,而不是应使用的最终文件(例如,使用make)。如果您对为什么这看起来“荒谬”复杂感到好奇,请尝试阅读:stackoverflow.com/a/26832773/939557如今,随着GitHub等成为通用发行渠道,autoconf的某些假设正在瓦解:人们正在逐渐直接从源代码控制工具获取源代码,而不使用维护者创建的源代码分发压缩包。

– MadScientist
17-10-13在17:21

#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运行autoconfautomake: br />'autoconf'是宏处理器。
它将使用宏指令的shell脚本configure.ac转换为完全的shell脚本configure。



automake-创建可生成的Makefile .in数据文件
(配置将在以后读取以制作Makefile)


Automake有助于创建可移植且符合GNU标准的Makefile。从简单的Makefile.ams创建复杂的Makefile.ins


安装程序运行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



输入/输出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