makeはファイルの依存関係を記述したMakeファイルを使って、ターゲットとなるファイルを生成するコマンドです。主にC言語のソース・ファイルをコンパイルおよびリンクするときに使います。

make [ -f Makeファイルのパス ] [ ターゲット ... ] [ マクロ = ... ]

オプション -f が省略されたときは、MakefileまたはmakefileをMakeファイルのパスとします。

引数ターゲットが省略されたときは、Makeファイル中で最初に現れたターゲットを対象とします。

Makeファイルはターゲットの依存関係を以下の構造で記述します。

ターゲット : 依存ファイル
        コマンド

生成するファイルのパスを ターゲット に指定します。ターゲットを生成するのに必要なファイルのパスを 依存ファイル に記述します。依存ファイルからターゲットを生成するために実行するコマンドを コマンド に記述します。

makeはターゲットと依存ファイルのタイムスタンプを調べて、以下の場合にターゲットを生成するコマンドを実行します。

makeはコマンドを実行するたびにシェルを起動する。たとえば次のMakefileではcdコマンドとccコマンドはそれぞれ別のシェルが起動される。

a.out: $(SRCS)
    cd dist
    cc $(SRCS)

したがって、ccが実行される際のカレントワーキングディレクトリはdistではない。同じシェルで複数のコマンドを実行したい場合は、セミコロンで区切る。

a.out: $(SRCS)
    cd dist; cc $(SRCS)

Makeファイルの中では、次に示す動的マクロを使用することができます。

$*
現在のターゲットのベース名
$<
依存ファイルの名前
$@
現在のターゲットの名前
$?
ターゲットより新しい依存ファイルのリスト

拡張子からサフィックスルールを定義することもできる。.cから.oを作成するサンプルを以下に示す。

# サフィックスルール (.c -> .o)
.c.o :
    cc -c $<

定義済み変数

makeの定義済み変数を次に示す。

makeの定義済み変数
変数 説明 デフォルト値
AR アーカイブするプログラム ar
CC Cプログラムをコンパイルするプログラム cc
CXX C++プログラムをコンパイルするプログラム g++
RM ファイルを削除するコマンド rm -f
ARFLAGS アーカイブするプログラムに与えるフラグ
CFLAGS Cコンパイラに与える追加フラグ
CXXFLAGS C++コンパイラに与える追加フラグ
LDFLAGS ldに与える追加フラグ

shell関数

makeのshell関数は、シェルコマンドを呼び出すことができる。

basedir = $(shell pwd)

all:
    echo $(basedir)
スポンサーリンク