Make 次:もっとも簡単な例

makeの第一歩: makeって何するもん?

makeはどんなときに利用するものなのか、具体例で説明することにしましょう。

なお、C言語のcompileを例にしていますが、例えばgfortranの場合もまったく同様です。 gccをgfortran、ファイルcopy.cなどをcopy.fと読み変えてください。 C以外にmakeを使うコンパイラの指定、オプションの指定 も参照してみてください。

catの私家版であるmycatは、3つのファイル、mycat.cgetline.ccopy.c、から出来ています。 これらから実行ファイルmycatを作るには、

      $ ls
      copy.c getline.c mycat.c
      $ gcc -c mycat.c 
      $ gcc -c getline.c
      $ gcc -c copy.c
      $ ls
      copy.c copy.o getline.c getline.o mycat.c mycat.o
      $ gcc mycat.o getline.o copy.o -o mycat
とします。 この例のようにソースファイルが単独で完結していない場合は、-c オプションをつけてmycat.cなどに対応するオブジェクトファイルmycat.o等を生成させ、それらをリンク(結合)して実行ファイルを作るのでした。

さて、ファイルgetline.cにバグがあると気が付いてそれを修整したとします。 mycatを作り直さなくてはいけませんね。 では、もう一度

      $ gcc -c mycat.c 
      $ gcc -c getline.c
      $ gcc -c copy.c
      $ gcc mycat.o getline.o copy.o -o mycat
としなくてはいけないのでしょうか?

getline.cの変更によって変化のあるオブジェクトファイルはgetline.oだけです。 mycat.oやcopy.oは全く変化しませんから、getline.oだけ作りなおしてリンクしなおせばよいのです。

      $ gcc -c getline.c
      $ gcc mycat.o getline.o copy.o -o mycat
だけですみます。

ここでmakeの登場です。

この例では、人間がファイル(ソースファイル、オブジェクトファイル、実行ファイルなど)の相互の関係(依存関係と言います)を見て、どれをコンパイルしなおすか決めました。 makeはこの依存関係を自動的に調べて何を再コンパイルすべきかを決定して、それにしたがって再コンパイルの作業を行なうユーティリティなのです。


Make 次:もっとも簡単な例
小栗栖 修
メールアドレス: ogurisu[AT]kanazawa-u.ac.jp ([AT]を@におきかえてください)