Skip to content.

Sections
Personal tools
You are here: Home » コミュニティ » masarl memorial » homepage3.nifty.com » masarl » article » gnu-make » 自動化のためのGNU Make入門講座 - makeを使ってみよう

自動化のためのGNU Make入門講座 - makeを使ってみよう

Document Actions

自動化のためのGNU Make入門講座 -
makeを使ってみよう

makeは作業を自動化するためのツールです.makeを利用するには,

  • メイクファイルに作業内容を書く
  • コマンドラインからmakeを実行

という2つの手順を踏みます.ここでメイクファイルというのは作業内容が書かれたテキストファイルのことです.makeはメイクファイルの中身を参照し,そこに書かれた一連のコマンドを実行します.メイクファイルは通常Makefileというファイル名をつけます.makefileでもいいですが,Makefileが僕の好みです.

実際にやってみましょう.まず,次の内容のファイルをMakefileという名前で作成してください.

all:
	echo Hello World!

このメイクファイルは,"Hello World!" という文字をechoコマンドを使って表示するという単純なものです.ここで,注意しなければならないのは,2行目の先頭とechoの間はタブ1文字である,ということです.それ以外の空白文字を使うとエラーになってしまいますので注意してください.makeでは,行頭のタブ文字が特別な意味をもっており,その行をコマンド行と解釈します.

次に,そのMakefileと同じディレクトリでシェルのコマンドラインからmakeと入力し,実行します.すると,次のように表示されるでしょう.

$ make
echo Hello World!
Hello World!

ここでecho Hello World!とエコーバックされるのがいやな場合は,Makefileのechoコマンドの前に@マークをつけます.

all:
	@echo Hello World!

こうすればHello World!のみが表示されるようになります.

$ make
Hello World!

コマンド行の@マークは,そのコマンド行をエコーバックしないようにする意味を持ちます.

Emacsの便利コマンド

M-x compileコマンド

MeadowなどEmacs系のエディタを使っている人は,わざわざDOSプロンプトを開いてmakeを実行する必要はありません.makeを実行するためのコマンドM-x compileが用意されています.M-x compileを実行すると,ミニバッファにCompile command: と実行するコマンドが何か聞いてきます.ここをmakeと入力しリターンキーを押せばEmacs上で実行できて便利です.

このM-x compileコマンドは非常に便利なコマンドで,makeに限らずシェル上で実行できるコマンドならなんでもOKです.例えばrubyのプログラムを書いていて,そのプログラムを実行したい場合M-x compileコマンドが使えます.Compile command: と聞いてきたときに,ruby foo.rb のように入力するだけです.

なお,M-x compileコマンドなどミニバッファに入力する手間を省くために,ミニバッファのヒストリ機能を使うとよいでしょう,ミニバッファにカーソルがあるとき,Alt-pで前の内容,Alt-nで次の内容に移ることができます.

M-x recompileコマンド

makeでは,どのディレクトリで実行するかということが重要です.というのも,多くの場合makeはカレントディレクトリのMakefileを参照して実行するからです.

実際の作業では,何度も同じM-x compileを実行することになるでしょう.このとき,違うディレクトリ(のバッファ)に移って編集作業を行い,再びM-x compileコマンドを実行するのは少し手間です.というのも,ディレクトリが違うので一旦元のディレクトリ(のバッファ)に移ってからM-x compileコマンドを実行しなければならないためです.

そこで,*compilation*バッファがあればそこに移動してM-x compileコマンドを行なうM-x recompieコマンドを作成しました.ぜひ利用してください(recompile.el).なお,もともとM-x recompileコマンドは標準で用意されていますが,recompile.elの内容はそのコマンドを上書きしてしまうので注意してください.利用する場合は,.emacsファイルに

(load "recompile")

という行を付け加えます.

M-x next-errorコマンド

M-x compileで実行し,エラーが発生した場合M-x next-errorコマンドでファイルのエラー行にジャンプすることができます.普通はC-x `というキーにバインドされています(Ctrl キーと X を同時に押し,一旦離した後 シフトキーを押しながら ` です).このコマンドは非常に便利ですのでぜひ覚えておいてください.例えば,

all:
	@echo Hello World!

$(error エラー)

というようにMakefileの4行目にわざとエラーを書いてからmakeを実行すると,

*compilation* のエラー表示

と*compilation*バッファに表示されます.ここでC-x `と入力するとMakefileの4行目のエラー箇所に自動的にジャンプします.これは,コンパイルエラーでファイルのエラー箇所にジャンプしたいときや,grepコマンドで検索箇所にジャンプしたいときにも使えます.

makeのコマンドラインオプション

Makefile以外のファイルでmakeしたい(-f)

makeはカレントディレクトリにあるMakefile(makefile)という名前をもつファイルをデフォルトのメイクファイルとして認識します.テストを行いたいときなど,他のメイクファイルを使ってmakeを実行したい場合-fオプションを使います.

$ make -f foo.mk

こうすれば,同じディレクトリの Makefile ではなく foo.mk をメイクファイルとして実行します.一般に メイクファイルの拡張子は .mk とするのが普通です(nmakeではmakですが,Unixの世界では通常mkとするようです).

どんなコマンドが実行されるのかだけ知りたい(-n)

Makefileを書いた際,デバッグのために実際にどんなコマンド行が実行されるのかだけを知りたい場合があります.そういうときは-nオプションを使います.

$ make -n

こうすれば,実行されるコマンド行を出力するだけで実行されません.他人の書いたMakefileを自分で使う場合,何が起こるのか知りたいときにも便利です.