make について
 


従来のコンパイル&実行

calc1.c(1つのファイルの中に、3つの関数)

  1. calc1.c
    #include <stdio.h>
    
    int add(int x, int y);
    int sub(int x, int y);
    
    int main(){
      int x=10, y=3;
    
      printf("add(%d,%d)=%d\n",x,y,add(x,y));
      printf("sub(%d,%d)=%d\n",x,y,sub(x,y));
    
      return(0);
    }
    
    int add(int x, int y){
      return (x+y);
    }
    
    int sub(int x, int y){
      return (x-y);
    }

コンパイル&実行

gcc -o calc1 calc1.c
calc1

分割コンパイル&実行

calc1.cを3つのファイルの分割すると(マルチファイルプログラム)

  1. calc2.c
    #include <stdio.h>
    
    int add(int x, int y);
    int sub(int x, int y);
    
    int main(){
      int x=10, y=3;
    
      printf("add(%d,%d)=%d\n",x,y,add(x,y));
      printf("sub(%d,%d)=%d\n",x,y,sub(x,y));
    
      return(0);
    }
  2. add.c
    int add(int x, int y){
      return (x+y);
    }
  3. sub.c
    int sub(int x, int y){
      return (x-y);
    }

コンパイル&実行

gcc -c calc2.c
gcc -c add.c
gcc -c sub.c
gcc -o calc2 calc2.o add.o sub.o
calc2

OS(オペレーティングシステム)が提供するユーティリティmake

  1. コンパイルをおこなう複数のプログラムファイルが、再コンパイルと再リンクに必要とする依存関係を1つのファイルに記述し実行するという考えが makeコマンド である。
  2. make を使って複数ファイルのプログラムをコンパイル&実行するとき、その依存関係が記述されているファイルを Makefile と呼ぶ。
  3. Makefile の一般的な形式
    #コメント:行末まで
    target: source {source2} {source3}… # target は1桁目から記述
            command                      # command は1桁目タブ:<Tab>
            {command}
    …
    1. target は source に依存し、依存されているファイル(source)に変更があったとき、command を実行する。

make によるコンパイル&実行

  1. calc2.c をコンパイル&実行するための Makefile は次のようななる。
    #
    # calc2.c のコンパイル&実行のための makefile
    #
    
    calc2: calc2.o add.o sub.o
     <Tab> gcc -o calc2 calc2.o add.o sub.o
    
    calc2.o: calc2.c
     <Tab> gcc -c calc2.c
    
    add.o: add.c
     <Tab> gcc -c add.c
    
    sub.o: sub.c
     <Tab> gcc -c sub.c
    1. 実行可能ファイルcalc2は、3つのオブジェクトファイル(calc2.o,add.o,sub.o)に依存している。
    2. オブジェクトファイル calc2.o は、C言語のソースファイル calc2.c に依存している。
    3. オブジェクトファイル add.o は、C言語のソースファイル add.c に依存している。
    4. オブジェクトファイル sub.o は、C言語のソースファイル sub.c に依存している。
    5. それぞれの依存ファイルに変更があったときは、targetの次の行、Tabから始まる command を実行する。
  2. この Makefile を用いると、calc2 のコンパイル&実行は次のようになる。
    make -f Makefile
    calc2
    1. ファイル名が Makefile であれば、そのまま makeコマンド だけでも実行される。しかし、複数の Makefile を想定し、"make -f ファイル名"とした方がよい。

練習問題

  1. 掛け算(mult.c)、割り算(div.c)、剰余(remain.c)のプログラムファイルを作成し、四則+剰余演算を行う calc3.c のmain関数を有するプログラムファイルと Makefile を考え実行し、その動作を考察せよ。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-05-28 (木) 12:30:53 (1547d)