makeコマンドの引数とオプション、使い方

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

使い方

makeコマンドは存在しないファイルを作成したり、古いファイルを更新することができる。

ファイルを作成・更新するためのルールを記述したファイルをMakefileといい、makeコマンドが参照する。

makeコマンドの構文は次のとおり。

make [option...] [target...] [macro=value...]

引数

makeコマンドの引数にはターゲットを指定する。

たとえば、次の内容のMakefileを作成する。

build:
cc example.c

clean:
rm example.o

ソースファイルをコンパイルするときには、makeコマンドの引数にターゲット「build」を指定して実行する。

$ make build

オブジェクトファイルを削除するときには、makeコマンドの引数にターゲット「clean」を指定して実行する。

$ make clean

makeコマンドの引数を省略した場合は、Makefile中で最初のターゲットが実行される。

前述のMakefileの場合は、ターゲット「build」が実行される。

$ make

オプション

makeコマンドには次のオプションを指定できる。

-f path
makefileのパスを指定する。-fオプションを省略した場合、カレントディレクトリのMakefileまたはmakefileという名前のファイルがMakeファイルとして使われる。
$ make -f example
target
makefileに記述されているターゲットのうち、指定したターゲットを実行対象とする。引数targetが省略されたときは、Makeファイル中で最初に現れたターゲットを対象とする。
$ make clean

Makefileの書き方

Makeファイルは、ファイルの依存関係を記述したファイルである。ファイル名は任意でよいが、Makefileまたはmakefileという名前にしておくと、makeコマンドを実行するときにMakeファイル名の指定を省略できる。

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

target : depend
  command
target
生成するファイルのパス
depend
ターゲットを生成するのに必要なファイルのパス
command
依存ファイルからターゲットを生成するために実行するコマンド

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

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)

インストール

makeコマンドがOSにプリインストールされていなければ、自分でインストールする必要がある。

Linux

GNU/LinuxディストリビューションのひとつであるUbuntuにmakeコマンドをインストールするには、aptコマンドを使用する。 インストールにはスーパーユーザ権限が必要なので、sudoコマンドも併用する。

$ sudo apt install make

Windows

GNU makeをインストールすることで、Microsoft Windowsにおいてもmakeコマンドを利用できる。

Make for Windowsの公式サイトからインストーラ等をダウンロードできる。

コマンドプロンプトやPowerShellからmakeコマンドを使用できるようにするためには、実行ファイルが存在するフォルダのパス( C:\Program Files (x86)\GnuWin32\bin)を環境変数 Path に追加する必要がある。

環境変数
Figure 1. 環境変数