makefile.in・とは?初心者にもわかる使い方と仕組み共起語・同意語・対義語も併せて解説!

  • このエントリーをはてなブックマークに追加
makefile.in・とは?初心者にもわかる使い方と仕組み共起語・同意語・対義語も併せて解説!
この記事を書いた人

高岡智則

年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)


はじめに

この記事では makefile.in とは何か を中学生にも分かるように丁寧に解説します。ソフトウェアを作るときには複数のファイルを組み合わせてビルドしますが、その過程を自動化する仕組みが Makefile です。この自動化の世界で重要な役割を果たすのが makefile.in というファイルです。

makefile.in とは何か

makefile.in は実際に動作するプログラムではなく、ビルドのときに使われるテンプレートのようなファイルです。名前の通り makefile.in は次の段階で変化します。まず Makefile.am というファイルから自動ツールが makefile.in を作成します。次に configure というスクリプトが makefile.in を読み込み、環境に合わせて実際の Makefile を作り出します。この仕組みのおかげで同じソフトウェアをさまざまなOSや環境で正しくビルドできるのです。

Makefile.in と Makefile の違い

Makefile は実際にコマンドを実行してソフトウェアをビルドする指示書です。一方 makefile.in はその指示書の元となるテンプレートです。Makefile.in は文字どおりのテンプレートで、変数の値やパスの違いが実際の環境に合わせて置換されます。最終的に生成されるのは Makefile であり、ここからビルドが始まります。

なぜ makefile.in が使われるのか

複数のプラットフォームや設定で動作するソフトウェアを作るとき、すべての環境に合わせた Makefile を手作業で作るのは大変です。Makefile.in を使うと、共通の部分はテンプレートとして一箇所にまとめ、環境ごとの差異だけを configure が埋めてくれるため管理が楽になります。これにより新しい環境でも同じソースコードを正しくビルドできる可能性が高まります。

Makefile.in の生成元と流れ

一般的な流れは以下のとおりです。まずソースコードの開発者は Makefile.am や configure.ac などのファイルを準備します。次に自動化ツールがこれらのファイルを読み取り makefile.in として出力します。その後 configure スクリプトが実行され、現在の環境に合わせた実際の Makefile を作ります。この実際の Makefile がビルドの指示書として機能します。

実例と注意点

学習の際はまず自分の環境で自動化ツールをインストールしてから、サンプルのソフトウェアをビルドしてみると理解が深まります。makefile.in は自分で直接編集するべき対象ではなく、あくまでも元となるテンプレートを編集してから再生成するのが基本です。もし自分で直したい箇所がある場合は Makefile.am や configure.ac を修正してから再度ビルドし直します。

実用的な流れを理解する表

項目説明
Makefile.in の役割ビルドの元になるテンプレート。configure が実際の Makefile を作るときの土台になる
Makefile との違いMakefile は実行用のビルド指示書。Makefile.in はその元になる雛型
生成元のファイル通常は Makefile.am や configure.ac などのファイルから作られる
編集の仕方直接 Makefile.in を編集するより Makefile.am を編集して再生成するのが基本

まとめ

makefile.in とは自動化されたビルドプロセスの中核を担うテンプレートファイルです。実際のビルドは configure によって環境に合わせて Makefile が作られ、Makefile がソフトウェアをコンパイルします。初心者はまず Makefile.in の役割と流れを理解し、焦らずに先達の作る仕組みを学ぶことが大切です。


makefile.inの同意語

Makefile.in
Autotools系のプロジェクトで使われる、Makefileを生成するための雛形テンプレートファイル。configureスクリプトがこのテンプレートを元に最終的なMakefileを作成します。
Makefile.inファイル
Makefile.inというファイル自体の名称。Autotools環境でMakefileを生成する元テンプレートとして機能します。
Makefileテンプレート
Makefileを作成する際の雛形や模板。中身には変数プレースホルダがあり、ビルド設定に合わせて置換されます。
Makefileの雛形
Makefileの基本形・見本。実際の最終Makefileはこの雛形を元に生成されます。
テンプレートMakefile
Makefileを生成する元となるテンプレートファイルの別表記。英語表記のバリエーションとして使われることがあります。
Makefile.template
英語表記の同等ファイル名。Makefileを生成するためのテンプレートとして用いられることが多い名前。
Autotools用Makefileテンプレート
Autotools(autoconf/automake)を使うプロジェクトでのMakefileの雛形。自動生成されるMakefileの元になるテンプレートです。

makefile.inの対義語・反対語

Makefile
Makefileは、Makefile.inを雛形としてではなく、実際のビルドに使われる最終的なファイルの代表例です。対義語として最も一般的に用いられます。
ファイル
テンプレートであるMakefile.inに対して、現場で実際に使用される“実体”のファイルを指します。雛形と対になる概念です。
完成版Makefile
テンプレートから整えられ、編集を終えた最終的なMakefile。ビルドに用いられる実用版の意合いです。
最終出力ファイル
Makefileの最終形として生成され、ビルドに適用される完成版のファイルを指します。
自動生成済みMakefile
自動ツールで作成されたMakefile。テンプレートであるMakefile.inの反対概念として位置づけられます。
手動編集版Makefile
自動生成ではなく手作業で編集・作成したMakefile。テンプレートからの派生だが人の手で仕上げられたものです。
テンプレート不使用の実体
テンプレート(雛形)を使わず実際に使われる実体ファイルという対義概念です。
自動生成後のファイル
テンプレートから生成工程を経て生まれた後のファイルを指します。最終的なMakefileを含むことが多いです。
生成されたビルド設定ファイル
ビルド設定を含むファイルが生成された状態を意味します。Makefile.inから派生して現れるファイルに近い概念です。
完成したビルド定義ファイル
ビルド定義が完成して実際のビルドに使われる状態のファイル。

makefile.inの共起語

Makefile.in
configure が Makefile に置換する前の雛形ファイル。変数置換 @VAR@ が使われ、ビルドのルールが定義されています。
Makefile
実際に make が解釈するビルド指示書。Makefile.in の置換結果として生成され、ビルドする対象や依存関係、インストール先などが記述されています。
configure
Autotools で生成される設定スクリプト。システム環境を検出し、Makefile.in などを環境に合わせて生成します。
configure.ac
Autoconf の入力ファイル。マクロを用いて configure スクリプトを生成する元データです。
configure.in
configure.ac の旧表記。基本的には同等の役割を持ちます。
Makefile.am
Automake の入力ファイル。どのプログラムをビルドするかなどの宣言を記述し、Makefile.in の生成元になります
automake
Makefile.in を生成するツール。Automake マクロを解釈してビルドルールの雛形を作成します。
autoconf
configure スクリプトを生成するツール。configure.ac のマクロを展開して実行可能なスクリプトにします。
aclocal
M4 マクロを収集・管理するツール。autoconf/automake が参照するマクロの集約を行います。
libtool
ライブラリのビルドとリンクを抽象化するツール。共有ライブラリの作成やプラットフォーム差異の吸収を補助します。
LT_INIT
libtool を有効化するための初期化マクロ。Makefile.in 側で libtool を使えるように設定します。
LT_CONFIG_LTLIBRARIES
libtool の設定でライブラリターゲットを定義するマクロ。静的/共有ライブラリのビルドオプションを指定します。
AM_INIT_AUTOMAKE
Automake の初期化を行うマクロ。Automake を使ったビルド設定の準備をします。
AM_SILENT_RULES
ビルド時のコマンド出力を抑制する設定。ビルドログを見やすくします。
AM_PROG_AR
アーカイブ作成ツールを検出する Automake のマクロ。静的ライブラリ作成時に ar を探します。
AC_CONFIG_HEADERS
config.h.in を config.h に変換する設定を行うマクロ。ヘッダの設定を管理します。
config.h.in
config.h の雛形テンプレート。configure が実行時にこのテンプレートを元に config.h を作成します。
config.h
configure 実行後に生成されるヘッダファイル。ビルド時の定数や環境設定を格納します。
config.status
configure 実行後に生成・更新されるスクリプト。Makefile の再生成などを行います。
config.cache
configure の実行結果をキャッシュするファイル。再実行時の速度を向上させます。
PKG_CONFIG
pkg-config コマンドの実行ファイル名。ライブラリ情報の取得に使われます。
PKG_CONFIG_PATH
pkg-config が検索するパスを指定する環境変数。
PKG_CONFIG_LIBDIR
pkg-config がライブラリ情報を参照するディレクトリを指定します。
CPPFLAGS
プリプロセッサ用のフラグ。ヘッダの検索パスや機能の有無を制御します。
CFLAGS
C コンパイラ用のフラグ。最適化レベルや警告の設定などを指定します。
CXXFLAGS
C++ コンパイラ用のフラグ
LDFLAGS
リンカ用のフラグ。ライブラリの探索パスやリンク時のオプションを設定します。
LIBS
リンク時に追加するライブラリのリスト。外部ライブラリとの結合を指定します。
prefix
インストール先の基準ディレクトリ。通常は /usr などがデフォルトです。
exec_prefix
実行ファイルのインストール先プレフィックス。prefix の下に配置されます。
bindir
実行可能ファイルをインストールするディレクトリ。
libdir
ライブラリをインストールするディレクトリ。
includedir
ヘッダファイルをインストールするディレクトリ。
datadir
データファイルをインストールするディレクトリ。
sharedstatedir
共有状態ファイルを置くディレクトリ。
top_srcdir
ビルド元のソースツリーのトップディレクトリ。
top_builddir
ビルド時のトップディレクトリ(多段ビルドで使用)。
srcdir
ソースファイルが格納されているディレクトリ。
VPATH
make がソースを探す追加の検索パス。
MAKEFLAGS
make 実行時の共通フラグ。
MAKELEVEL
現在の make の階層レベルを示す値。
ACLOCAL_FLAGS
aclocal の追加オプション。
config.sub
ホスト/ターゲットのタイプ判定を行うスクリプト。
config.guess
ホストの識別情報を推測するスクリプト。
depcomp
依存関係の生成を支援する補助スクリプト
AR
アーカイブ作成ツールの実行ファイル名(通常は ar)。
CC
C コンパイラの実行ファイル名。
CXX
C++ コンパイラの実行ファイル名。
RANLIB
アーカイブインデックス生成ツールの実行ファイル名。
LD
リンカの実行ファイル名。
M4
Autotools で使われるマクロを処理する m4 の実行ファイル名。
AC_HELP_STRING
configure のヘルプメッセージのテンプレートを定義するマクロ。
AC_OUTPUT
configure が作成する出力ファイルの指示を行うマクロ。

makefile.inの関連用語

Makefile.in
configure が Makefile に変換する前のテンプレートファイル。@VAR@ の置換で実際の値を埋め込み、ビルド設定を作成します。
Makefile
実際に make が読み込むファイル。ターゲット、依存関係、ビルドルールが記述されています。
Makefile.am
Automake の入力ファイル。ここにビルドルールを記述し、Automake が Makefile.in を生成します。
Automake
GNU Autotools の一部。Makefile.am から Makefile.in を作成するツールです。
Autoconf
GNU Autotools のもう一方の柱。configure スクリプトを生成するツールです。
configure
ソースコードのビルド環境を整えるスクリプト。システムの特徴を検出して Makefile.in を Makefile に変換します。
configure.ac
Autoconf の入力ファイル。AC_INIT などのマクロを記述します。
AC_INIT
パッケージ名やバージョンなどを初期化する Autoconf のマクロです。
AC_CONFIG_FILES
configure が処理する出力ファイルを宣言するマクロ。
AC_OUTPUT
生成する出力ファイルを列挙するマクロ。
AC_CONFIG_HEADERS
config.h を生成する設定を宣言するマクロ。
config.h.in
config.h の雛形ファイル。configure が config.h を作成する際の元ファイルです。
config.h
configure 実行後に生成されるヘッダファイル。機能フラグをコンパイル時に切り替えます。
AM_INIT_AUTOMAKE
Automake の初期化を宣言するマクロ。Automake を有効化します。
AM_CPPFLAGS
Automake が CPPFLAGS を受け継ぐための変数。プリプロセッサフラグを指定します。
CPPFLAGS
プリプロセッサのフラグ。ヘッダ検索パスなどを設定します。
CFLAGS
C コンパイラ用のフラグ。最適化レベルや警告の制御などを設定します。
AM_CFLAGS
Automake 用の CFLAGS の補足設定。
LDFLAGS
リンク時のフラグ。ライブラリの場所指定などを行います。
AM_LDFLAGS
Automake 用の LDFLAGS の補足設定。
PKG_CHECK_MODULES
pkg-config を使って外部ライブラリの有無を確認する Autotools のマクロ。
PKG_CONFIG
pkg-config の設定を有効にするための変数やツール。
LIBTOOL
ライブラリを作成・管理するためのツール。クロスプラットフォーム対応を支援します。
libtool
libtool の実行ファイル。静的/動的ライブラリの作成を仲介します。
libtoolize
libtool のインフラを準備・再生成するツール。
DESTDIR
パッケージを仮想的なルートにインストールするためのディレクトリ。
PREFIX
インストール先の基本ディレクトリ。通常は /usr などに設定します。
DISTCHECK_CONFIG_FLAGS
make distcheck 実行時の configure オプションを設定する変数。
INSTALL
install ターゲット。ビルド成果物をシステムの適切な場所へ配置します。
all
デフォルトのビルドターゲット。通常は全てをビルドします。
install
ビルド成果物をインストールするターゲット。
clean
ビルド過程で作成した中間ファイルを削除するターゲット。
@VAR@
Makefile.in 内のプレースホルダ。configure が実際の値で置換します。

makefile.inのおすすめ参考サイト


インターネット・コンピュータの人気記事

awstatsとは?初心者でもわかる使い方と基本解説共起語・同意語・対義語も併せて解説!
14213viws
bing・とは?初心者のための基本ガイド:検索エンジンの仕組みと使い方共起語・同意語・対義語も併せて解説!
2242viws
着信転送とは?初心者向けガイドで分かる使い方と設定のコツ共起語・同意語・対義語も併せて解説!
1037viws
充電アダプターとは何かを徹底解説|初心者でも分かる基本と選び方のコツ共起語・同意語・対義語も併せて解説!
810viws
リマインドメールとは?初心者にもわかる基本ガイドと使い方のコツ共起語・同意語・対義語も併せて解説!
747viws
com端子・とは?初心者にも分かる基礎ガイド|シリアルポートの使い方と歴史を解説共起語・同意語・対義語も併せて解説!
686viws
pinロックとは?初心者が知っておくべき基本と使い方ガイド共起語・同意語・対義語も併せて解説!
601viws
16進数カラーコード・とは?初心者でもつまずかない基礎と使い方ガイド共起語・同意語・対義語も併せて解説!
571viws
7zファイル・とは?初心者でもわかる使い方と特徴を解説共起語・同意語・対義語も併せて解説!
544viws
asp・とは?初心者向けに徹底解説する基本と使い方ガイド共起語・同意語・対義語も併せて解説!
509viws
ローカルポート・とは?初心者にも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
474viws
差し込み印刷・とは?初心者でもすぐわかる使い方と仕組みガイド共起語・同意語・対義語も併せて解説!
469viws
全角文字とは?初心者向け解説|全角と半角の違いをやさしく学ぶ共起語・同意語・対義語も併せて解説!
452viws
ワンタイムコード・とは?初心者でも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
433viws
none とは?初心者にもやさしく解説する意味と使い方ガイド共起語・同意語・対義語も併せて解説!
423viws
select句・とは?初心者でも分かるSQLの基本と使い方共起語・同意語・対義語も併せて解説!
372viws
csvダウンロードとは?初心者が今すぐ使える基本ガイド共起語・同意語・対義語も併せて解説!
364viws
ダイレクトチャットとは?初心者向けガイドで使い方と注意点を徹底解説共起語・同意語・対義語も併せて解説!
337viws
wi-fiとは?初心者向けにわかりやすく解説する基礎ガイド共起語・同意語・対義語も併せて解説!
305viws
sha256とは?初心者が知るべき暗号ハッシュの基礎と使い道共起語・同意語・対義語も併せて解説!
295viws

新着記事

インターネット・コンピュータの関連記事