Makefile は簡潔に書きましょう

仕組みが判ってしまえば Makefile は簡潔に書けます.$(CC) とか $@ とか $< なんて変数は使ったら負けです.

基本(その1)


 hoge.c   hoge Makefile
all: hoge


 $ make all

 hoge 


all: hoge
hoge: hoge.c
    $(CC) hoge.c -o hoge

MakefileMakefile
#!/bin/sh
CC=gcc
$CC  hoge.c -o hoge

使

基本(その2)

ここで例えば-O3 を付けてコンパイルしたい場合や,-lm を付けてリンクしたい場合は以下のようにします.

CFLAGS += -O3
LDFLAGS += -lm
all: hoge

基本(その3)

ソースコードhoge.c と fuga.c に分割している場合,つまり

場合は Makefile は以下のようになります

all: hoge
hoge: hoge.o fuga.o

基本(その4)


 -Wall  Makefile 
 $ make CFLAGS=-Wall

 gcc  gcc-3.1 
 $ make CC=gcc-3.1




 $ export CC=gcc-3.1
 $ make

makefile  make http://d.hatena.ne.jp/pyopyopyo/20070218/p2

また以下の本を読むこともおすすめします.

GNU Make
GNU Make
posted with amazlet at 09.01.10
ロバート メクレンバーグ
オライリージャパン
売り上げランキング: 91882
おすすめ度の平均: 5.0
5 どのファイルをコンパイルするかを指定する道具

make 改訂版
make 改訂版
posted with amazlet at 09.01.10
アンドリュー オラム スティーブ タルボット
オライリー・ジャパン
売り上げランキング: 130044
おすすめ度の平均: 4.5
5 プログラマーのお友達Make
4 makeファイルを独学で学んできた人にもお勧め

make の仕組みを理解する


*1 Makefile Makefile make 

 make  Makefile 


 $ make -p

 "-p"  make 




hoge.c  hoge 

hoge.c  fuga.c  hoge 



前準備

Makefilehoge.c を用意します.

all: hoge
int main()
{
  return 0;
}

make -p の実行

  $ make -p > log

大量の情報が 標準出力に出力されるので,一旦 log というファイルに出力を保存します.

make -p の結果を眺める(その1)




make  makefile 
ターゲット:  ソース
    コマンド

"" """"

make  
hoge: hoge.c

Makefilemake  hoge.c  hoge 

make -p 
 
"-p" log hoge 

hoge  all: hoge Makefile 
all: hoge
#  Implicit rule search has been done.
#  File does not exist.
#  File has been updated.
#  Successfully updated.

make 
hoge: hoge.c
#  Implicit rule search has been done.
#  Implicit/static pattern stem: `hoge'
#  Last modified 2007-02-18 14:27:19
#  File has been updated.
#  Successfully updated.
#  commands to execute (built-in):
        $(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@


ターゲット:  ソース
   コマンド


        $(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@



$^$@make使 $^ hoge.c $@  hoge 

 $(LINK.c)  LINK.c  log 
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)

CC
CC = gcc

$(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)


LINK.c = gcc



 make -p 
hoge: hoge.c
        $(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@


hoge: hoge.c
        gcc hoge.c -o hoge



 make 使 Makefile 

make -p の結果を眺める(その2)


hoge.c fuga.c  hoge makefilemake -p 

Makefile 使
all: hoge
hoge: hoge.o  fuga.o

make -p 
all: hoge

hoge: hoge.o fuga.o
      $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@

hoge.o: hoge.c
      $(COMPILE.c) $(OUTPUT_OPTION) $<
fuga.o: fuga.c
      $(COMPILE.c) $(OUTPUT_OPTION) $<

LINK.o COMPILE.c 
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
LINK.o = $(CC) $(LDFLAGS) $(TARGET_ARCH)


まとめ


make -p make Makefile




CC

 CFLAGS  CPPFLAGS 

 LDFLAGS 




make makefile  make  "-p"

また以下の本を読むこともおすすめします.

GNU Make
GNU Make
posted with amazlet at 09.01.10
ロバート メクレンバーグ
オライリージャパン
売り上げランキング: 91882
おすすめ度の平均: 5.0
5 どのファイルをコンパイルするかを指定する道具

make 改訂版
make 改訂版
posted with amazlet at 09.01.10
アンドリュー オラム スティーブ タルボット
オライリー・ジャパン
売り上げランキング: 130044
おすすめ度の平均: 4.5
5 プログラマーのお友達Make
4 makeファイルを独学で学んできた人にもお勧め