« FedoraでJREの設定がうまくいかない | トップページ | アクセス5000超えです!! »

2007/11/27

Makeでコンパイル

私はこれまでコマンドラインで作業するときにバッチファイルやメイクファイルを書いたことがありませんでしたが今日、本を読んでいたらこれらのことについて書いてあったのでやってみました。

バッチファイルはエディタでコマンド入力する内容をテキストファイルに書き込み、拡張子を.batのファイル名で保存すると、このファイルは「バッチ・ファイル」になります。

このバッチファイルでもコンパイルなどの作業をすることはできますが、プログラミングをしていて複数のソースをコンパイルするときに「メイクファイルが~」とは聞きますが、「バッチファイルが~」とはあまり聞かないのでメイクファイルについて書きます。

まず、次のソースがあるとします。

//(1) file1.c
#include <stdio.h>
#include "two.h"
#include "three.h"

int main(void)
{
  printf("Hop! ");
  transaction_two();
  transaction_three();

  return (0);
}

//(2) file2.c
#include <stdio.h>

void transaction_two(void)
{
  printf("Step! ");
}

//(3) file3.c
#include <stdio.h>

void transaction_three(void)
{
  printf("Jump!!\n");
}

//(4) two.h
void transaction_two(void);

//(5) three.h
void transaction_three(void);

これらを「make」コマンドを使ってコンパイルするときには拡張子.mkのメイクファイルというファイルが必要になってきます。(Windowsでは.makでUnixでは.mkらしい。.makでもmakeコマンドは認識したが、emacsは.mkしかメイクファイルと認めてくれなかった)

私が作ったメイクファイルは次のようになっています。

# メイクファイル hsj.mk

build: file1.o file2.o file3.o
   gcc -o HSJ file1.o file2.o file3.o

file1.o: file1.c two.h three.h
   gcc -c file1.c

file2.o: file2.c two.h
   gcc -c file2.c

file3.o: file3.c three.h
   gcc -c file3.c

メイクファイルの構成は、コロン(:)の前の単語は「ターゲット」といい、任意です。ターゲットのコロンの後にも何か書かれていますが、例えばbuild: file1.o file2.o file3.oの場合はbuildを行う前にfile1.o~file3.oを処理してからという意味です。そして次の行に書かれているのが、ターゲットbuildで実際に行うコマンドです。先頭の空白はTab文字1つぶんの空白で、スペースなどではエラーとなります。(先頭に#を置くとコメントになる)

file1.o~file3.oではターゲットのあとにファイル名が書かれていますが、今は詳しく説明できないので、とりあえずそのターゲットで行うコマンドに必要なファイル名ということで。(gccの-oオプションはコンパイル、アセンブリをしてリンクをしないということ)

今まではMakeを見て見ぬふりをしてきましたが、C言語のコンパイルをするためのMakeのしくみは少しわかったのでよかったかなと思っています。

|

« FedoraでJREの設定がうまくいかない | トップページ | アクセス5000超えです!! »

C」カテゴリの記事

Tools」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/222903/17209815

この記事へのトラックバック一覧です: Makeでコンパイル:

« FedoraでJREの設定がうまくいかない | トップページ | アクセス5000超えです!! »