web-dev-qa-db-ja.com

Makefile.amとMakefile.inとは何ですか?

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

彼らは何のためにあり、そして彼らはどのように働いていますか?

302
Mask

Makefile.amはプログラマー定義ファイルで、automakeによってMakefile.inファイルの生成に使用されます(.amaを意味しますutomアケ)。ソースのtarballによく見られるconfigureスクリプトは、Makefileを生成するためにMakefile.inを使用します。

configure script 自体は、configure.acまたはconfigure.in(非推奨)のいずれかという名前のプログラマー定義ファイルから生成されます。 .acautoconfの場合)が区別されます。生成されたMakefile.inファイルからそしてそのように私はmake dist-cleanを実行するrm -f *.inのような規則を持つことができます。これは生成されたファイルなので、通常Git、SVN、Mercurial、CVSなどのリビジョンシステムに保存されるのではなく、.acファイルに保存されます。

GNU Autotools を読んでください。まず makeMakefile について読み、次に automakeautoconflibtool について読んでください。など.

348

簡単な例

恥知らずからから適合: 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], [[email protected]])
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は、Makefile.inを含む、Gitによって追跡されるべきいくつかのテンプレートファイルを生成します。初めて実行するだけです。

  • make installは以下をインストールします。

    • /usr/local/binへのバイナリ
    • README.mdから/usr/local/share/doc/automake_hello_world

GitHubでは 試してみることができます。

参照

Makefile.am - 自動生成するためのユーザ入力ファイル

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
14
user966588

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

1)autoconf - shippableを作成しますconfigureスクリプト(インストーラはrunしてMakefileを作成します)
2)automake - shippableを作成しますMakefile.in(これはconfigure後で作成しますread作成するには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

入力 - > PROGRAMS - >出力:

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

configure.in - > autoconf - > configure(スクリプト) configure .inは廃止予定です。configure.acを使用してください)
configure.ac - > autoconf - > configure(スクリプト)---(* .ac = a uto c onf)

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

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

Makefile.in - > configure - >Makefile(* .in = in putファイル)

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


"Autoconfは、ソフトウェアのソースコードパッケージを自動的に設定するためのシェルスクリプトを生成するM4マクロの拡張可能なパッケージです。これらのスクリプトは、手動のユーザー介入なしにパッケージをUNIXのようなシステムに適応できます。テンプレートファイルのパッケージの設定スクリプトで、そのパッケージで使用できるオペレーティングシステムの機能がM4マクロ呼び出しの形式で一覧表示されます。」

"AutomakeはGNU Coding Standardsに準拠したMakefile.inファイルを自動的に生成するためのツールです。AutomakeはAutoconfの使用を必要とします。"

マニュアル:


興味深い事実:
LibreOfficeをビルドするのに使用される主なconfigure.acは、12,000行を超えるコードです(ただし、サブフォルダーには57の他のconfigure.acファイルもあります)。
これから生成したconfigureは41k行を超えるコードです。
Makefile.inMakefileはどちらも493行のコードにすぎません。
(ただし、さらに768個のMakefile.inがあります。サブフォルダーにあります。

10
Elliptical view