makeコマンド

記事の内容


makeコマンドについて簡単にまとめました. 動作環境は, MacBookPro+fishシェルです. また加筆するかもです...

makeコマンドの基本

makeコマンドは, ファイル作成を人間に代わって実行してくれるコマンドです. 大抵の場合, ファイルの作成方法には, 手順があります. その手順を記しておけば, あとはmakeが全部実行してくれます. また, ファイル作成の過程で使っていた数値やコマンドを変えたとしても, makeコマンドは柔軟に対応し, 全て代行します.

makeコマンドは次のように書きます.

makeコマンドの基本】
make

これだけです. ただし, 予めMakefileという名前のファイルを作成する必要があります.

Makefileの基本的な形

Makefile(またはmakefile)の基本的な形は以下の通りです.

【Makefile】
fileA:file1 file2 ...
[tab] command1
[tab] command2
      ...
fileB:file1 file2 ...
[tab] command1
[tab] command2
      ...

まず, 最初の行のfileAに注目してください. このfileAが最終的に作成したいファイルです. そして, :を挟んで右側に, fileAの作成に必要なファイルfile1,file2,...を列挙します. その下の行には, file1,file2,...からfileAを作成する過程をコマンドで記述します. そして, file1,file2,...を作成する過程が5行目以降のfileB...の部分です. このように, "必要なファイル"と"そのファイルを作成するのに必要なファイル"と"ファイル作成のためのコマンド"を上から順に書いていきます.

例を挙げます. この例自体は現実には全く使えない例です(C言語なら役に立ちますが...). ここで行う作業は, "単位円上の離散点をデータとして保存し, データ点をつないで単位円を描くプログラムを作成する"ことです. データ点の作成にはJuliaを用います. また, プロットにはgnuplotを用います. ただし, Juliaはプロットもできるので正直無駄な作業です.

目的は, 単位円を描いた画像ファイルを得ることです. これをcircle.pngとします. circle.pngをgnuplotを用いて描きます. gnuplotのコマンドを収めたファイルcircle.gplと, データ点を保存したファイルcircle.datが必要です. 1行目は次のように書きます. "circle.png: circle.gpl circle.dat". 必要なファイルを揃えるために, まず, 次のファイルを作成します.

【ファイル作成: circle.gpl】
set output "circle.png"
set term png
set size square 1
plot [-1.2:1.2] [-1.2:1.2] "circle.dat" with linespoints

gnuplot "circle.gpl"とすれば図が描けます.

次に, circle.datを作る必要があります. これはJuliaで作成します. 次のファイルを作成します.

【ファイル作成: circle.jl】
n = 100
ts = range(0,2*pi,length=n)
for t in ts
    println(cos(t),"\t",sin(t))
end

これを実行して, 出力をcircle.datファイルに格納します. ということで, circle.datを作成する行は次のように書きます. circle.dat: circle.jl. また, circle.datを作成するためにコマンドは, julia circle.jl > circle.datです. まとめると, Makefileは次のように書きます.

【ファイル作成: Makefile】
circle.png: circle.gpl circle.dat
	gnuplot circle.gpl
circle.dat: circle.jl
	julia circle.jl > circle.dat

Makefileを書いたら, 次のコマンドを実行します.

makeコマンドの実行】
make

うまくいけば, 出力として実行されたコマンドが次のように表示されます.

makeコマンドの実行; 実行結果】
julia circle.jl > circle.dat
gnuplot circle.gpl

また, lsコマンドを実行すれば, 目的の画像ファイルcircle.pngが作成されているはずです. openを用いて表示します.

【画像の表示】
open circle.png
【画像の表示; 実行結果】

ここで, コードの一部を少し変えてみます. コードの一部を変更しても, 再実行は簡単です.

【ファイル変更: circle.jl】
n = 100
ts = range(0,2*pi,length=n)
for t in ts
    println(cos(t),"\t",sin(t)/2)
end

ファイルを変更したら, 次のようにmakeコマンドを再実行します.

makeコマンドの実行】
make

再び画像を開くと, 次のような画像が得られます.

【画像の表示】
open circle.png
【画像の表示; 実行結果】
参考文献
      [1]矢吹道郎, 大竹敢, 使いこなすgnuplot, テクノプレス, 2004
      [2]Andrew Oram, Steve Talbott, make 改訂版, オライリー・ジャパン, 2009