2010年10月22日金曜日

makeとmakefile おさらい

Makeとは
makeファイルとは、依存で構成されている時にコンパイル簡略化目的で開発されたものである

サンプルMakefileの例

・hoge1.c
・hoge2.c
・header.h
※header.hはhoge1.c,hoge2.cに#includeされいるものとする。

hoge1.c

/* hoge1.c */
#include "header.h"


hoge2.c

/* hoge2.c */
#include "header.h"


action.out --> hoge1.c と hoge2.c のコンパイルしたオブジェクトファイルをリンクの実行ファイル
つまり、action.out と hoge1.c と hoge2.cは依存関係。
また header.hを #includeしているので、header.h と hoge1.c と hoge2.cも依存関係である。
makefileの作成

/* makefile1 */
action.out: hoge1.o hoge2.o
cc -o action.out hoge1.o hoge2.o
hoge1.o: hoge1.c
cc -c hoge1.c
hoge2.o: hoge2.c
cc -c hoge2.c

hoge1.o: header.h
hoge2.o: header.h



makefileの作成 サフィックスルール

#makefile2
action.out: hoge1.o hoge2.o
cc -o action.out hoge1.o hoge2.o
.c.o:
cc -c $<

hoge1.o: header.h
hoge2.o: header.h



makefileの作成 サフィックスルール+マクロ

#makefile3
CC = cc
OBJS = hoge1.o hoge2.o

action.out: $(OBJS)
$(CC) -o $@ $(OBJS)
.c.o:
$(CC) -c $<

hoge1.o: header.h
hoge2.o: header.h


makeの実行

% make

0 件のコメント:

コメントを投稿