Last modified: Thu Apr 10 09:24:57 JST 2008

[top |  back |  next]

make

開発工程の自動化

プログラムが複雑化すると,機能ごとの関数に分割し開発した方が、 全体の見通しがよく,効率的である. さらに,開発するシステムが複雑なものとなると,全体を機能別に分類し, 複数のファイルに分けて開発することになる. 複数のメンバーからなるチームでの開発では,このことは不可避である.

プログラムの開発過程で、 複数のソースファイルをファイルごとにコンパイルする分割コンパイルや それらを1つに統合し,実行ファイルにまとめる操作を毎回 繰り返したのでは、手数が複雑化する. そこで、この工程を自動化するツールが不可欠となる. unix/linuxでは、このような機能として make コマンドが用意されている.

makeコマンド を利用するには,開発するファイルの依存関係を記述した ファイル(Makefile)を用意しておく必要がある.

makeはMakefileに記述された内容を生成ルールとして ファイルを生成する工程を理解する. そして,各ファイルのタイムスタンプを調べ, 最小限の作業工程で目的のファイルを生成する.

$ man make

prog1.c, prog2.c inc1.h から exec1 を生成する: Makefileに記述するファイルの依存関係とコマンドは
      生成するファイル:  生成に必要なファイルを空白で区切って並べる
      「TAB」コマンド
とペアで記述する. ここで,コマンド行は,必ず,タブ(TAB) で始める必要がある.

make コマンドにより生成するファイルなどをターゲットと呼ぶ. 以下,例をもとに Makefileでの生成規則の記述例を述べる.

  1. file1.c をコンパイルし,実行ファイル exec1 を生成する. その際、数学関数ライブラリを読み込む.
            exec1: file1.c
                    cc -o exec1 file1.c -lm
    
    この記述は次のように解釈される.

  2. prog1.c, prog2.c, prog3.c より exec0 を生成する
            exec0: prog1.o prog2.o prog3.o
                    cc -o exec0  prog1.o prog2.o prog3.o
    	prog1.o: prog1.c
    	        cc -c prog1.c
    	prog2.o: prog2.c
    	        cc -c prog2.c
    	prog3.o: prog3.c
    	        cc -c prog3.c
    
    この記述はmakeにより次のように解釈される.


[top |  back |  next]

学科< 研究室< 授業