Makefile.amおよびMakefile.inとは何ですか?


335

これら2つのファイルは、主にオープンソースプロジェクトで見られます。

それらは何のためにあり、どのように機能しますか?

回答:


381

Makefile.amプログラマーが定義したファイルでありautomakeMakefile.inファイルの生成に使用されます(.am略称 uto m ake)。configure通常、ソースのtarballに見スクリプトが使用されますMakefile.in生成しますMakefile

configureスクリプト自体はどちらかの名前のプログラマ定義ファイルから生成されるconfigure.acconfigure.in(非推奨します)。私は好む.ac(のため宇土Cそれが発生したからそれを区別するため、ONF)のファイルと私のようなルール持つことができる方法の実行を。これは生成されたファイルであるため、通常はGit、SVN、Mercurial、CVSなどのリビジョンシステムには保存されず、ファイルが保存されます。Makefile.inmake dist-cleanrm -f *.in.ac

GNU Autotoolsの詳細を読んでください。記事を読むmakeと、Makefileまず、次いで約学びautomakeautoconflibtool、など


3
何の.in略ですか?
Utku

10
.in拡張手段のためのそれの入力そのconfigureマッサージ、(例えばして使用する必要がありません最終的なファイルへmake)。これは「途方もなく」複雑なようだ理由として、あなたしているが、好奇心旺盛な場合は、読んでみてください:stackoverflow.com/a/26832773/939557 のGitHubでこれらの日などの一般的な流通チャネルのautoconfの仮定の一部を壊しているになってきて:人が取得していますメンテナが作成したソース配布のtarballを使用するのではなく、ソースコード管理ツールから直接ソースを取得します。
MadScientist 2017年

53

簡単な例

恥知らずに適応: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

GitHubで試してみてください。


1
生成されたファイルをVCSで保持する必要があるのはなぜですか(これはGit BTWだけではない場合があります)?
Victor Yarema 2017

@VictorYarema私はなぜその結論に達したのか忘れてしまった!見つけたら教えてください。
Ciro Santilli郝海东冠状病六四事件法轮功

19

DEVELOPERの実行autoconfautomake

1)autoconf- 出荷可能な構成スクリプトを作成します
(インストーラーは後で実行してMakefileを作成します

2)automake- 出荷可能なMakefile.inデータファイルを作成します
configureは後で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


入力/出力マップ

以下の表記はおおまかに:入力->プログラム->出力

DEVELOPERはこれらを実行します。

configure.ac-> autoconf- > configure(script)---(*。ac = a uto c onf)
configure.in-> autoconf- > configure(script)---(configure.indepreciated。Use configure.ac)

Makefile.am-> automake- > Makefile.in -----------(*。am = a uto m ake)

INSTALLERはこれらを実行します。

Makefile.in - > の設定 - > Makefileの(。* = プット・ファイル)

Makefile- > make ---------->(ダウンロードまたは一時ディレクトリに新しいソフトウェアを置く)
Makefile- > make install ->(システムディレクトリに新しいソフトウェアを置く)


" autoconfは、ソフトウェアソースコードパッケージを自動的に構成するシェルスクリプトを生成するM4マクロの拡張可能なパッケージです。これらのスクリプトは、手動のユーザー介入なしで、パッケージを多くの種類のUNIXライクなシステムに適合させることができます。Autoconfは、パッケージの構成スクリプトをパッケージが使用できるオペレーティングシステム機能をM4マクロ呼び出しの形式でリストしたテンプレートファイル。」

" automakeは、GNUコーディング標準に準拠したMakefile.inファイルを自動的に生成するためのツールです。Automakeでは、Autoconfを使用する必要があります。"

マニュアル:

無料のオンラインチュートリアル:


例:

LibreOfficeのビルドに使用される主なconfigure.acは、12,000行を超えるコードです(ただし、サブフォルダーには他に57個のconfigure.acファイルがあります)。

これから、私の生成された構成は41k行を超えるコードです。

そして、しながら、Makefile.inMakefileのコードの両方の唯一の493行があります。(しかし、サブフォルダーにはさらに768個のMakefile.inがあります。)


16

参照

Makefile.am-automakeへのユーザー入力ファイル

configure.in-autoconfへのユーザー入力ファイル


autoconfはconfigure.inからconfigureを生成します

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

Makefile.inは、distを作成するときにtar.gzファイルにあるはずですよね?
Kemin Zhou、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.