2004年9月3日
Makefileの学習するには、とりあえず書きましょう。シェルスクリプトのコマンドが書けるので自分でMakefileのみ作りながら、マクロなどの概要を学びます。後は、どんな小さなC言語プログラムでもMakefileを書きましょう。そのうち覚えます。ちなみにやり方でJavaのビルドツールのAntを覚えると、XMLの概要も分かります。
# make
#変数=値
CC= gcc
CFLAGS= -g -Wall -O2 -std=c89 -pedantic
CPPFLAGS=
LIBS= -L.
INCLUDES= -I.
.c.o:
$(CC) $(INCLUDES) $(CFLAGS) -c $<
myatoi :
clean:
rm -f *.[o] myatoi
#
# ターゲット: 依存ファイル
#
aaa.o : hoge fuga
@echo $@ # ターゲット名(aaa.o)
@echo $* # ターゲット名からサフィックスを除いたもの(aaa)
@echo $? # 依存ファイルのリスト(hoge fuga)
# $@,$* $?などをマクロと呼ぶ
#
# サフィックスルール
#
# サフィックスとは、.suffix1から.suffix2が作られる事を定義する
# .suffix1.suffix2
#
#最初に.SUFFIXESを定義しなければならない.
.SUFFIXES: .hoge .fuga
#これで、.hoge.fugaのサフィックスルールがつかえる。
.hoge.fuga :
echo $< # $<はサフィックスルールでつかう
@echo "hello" > $<; # コマンドは;で終了させないと動作しない時有り
@cat $<; # @は表示しない
#サフィックスルールでも$@,$*,$?をつかえる
@echo $@
@echo $*
@echo $?
# 1.testmakeターゲットは、依存ファイルaaa.fugaをもつ。
# 2.aaa.fugaは、サフィックスの定義.hoge.fugaをよぶ。
testmake : aaa.fug
2_10 :
2_9 :
3_1 :
3_2 :
CC=gcc CPPFLAGS= CFLAGS=-ggdb -O2 -std=c89 -pedantic -Wall LIBS= INCLUDES= OBJS= bubble_sort.o insert_sort.o main.o select_sort.o utility.o shell_sort.o all : argorithm argorithm : $(OBJS) $(CC) $(LIBS) -o $@ $? rm -f $(OBJS) $(OBJS) : .c.o : $(CC) $(CPPFLAGS) $(CFLAGS) -c $< clean : rm -f $(OBJS)
PROGRAM=blob_sample
CC=gcc
PCC=proc
CFLAGS=-Wall -O2
PROCFLAGS = include=$(ORACLE_HOME)/precomp/public \
include=. \
include=/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include \
mode=ansi \
ireclen=256 \
select_error=yes \
sqlcheck=full \
maxopencursors=32 \
hold_cursor=no \
release_cursor=yes \
code=ANSI_C
INCLUDES=-I$(ORACLE_HOME)/precomp/public \
-I/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include
DBLOGIN=okita2/okita2@oracledb
ORACLE_LIBS=-L$(ORACLE_HOME)/lib -lclntsh
OBJS=blob_sample.o
all: $(PROGRAM)
$(PROGRAM): blob_sample.o
$(CC) -o $@ $(OBJS) $(ORACLE_LIBS)
clean:
@rm -f $(OBJS) $(PROGRAM) *.[c]
.SUFFIXES: .pc .c .o
.pc.o:
$(PCC) $(PROCFLAGS) iname=$< oname=$*.c userid=$(DBLOGIN)
$(CC) --save-temps $(CFLAGS) -c $*.c $(INCLUDES)
.pc.c:
$(PCC) $(PROCFLAGS) iname=$< oname=$*.c userid=$(DBLOGIN)
.c.o:
$(CC) $(CFLAGS) -c $< $(INCLUDES)
CC= gcc
CPPFLAGS=
CFLAGS= -ggdb -Wall -O2
INCLUDES=
LIBS= -lpthread
RM=/usr/local/bin/rm
PROGRAM = thread_sample
OBJS = quere.o control.o workcrew.o
all : $(PROGRAM)
$(PROGRAM) : $(OBJS)
$(CC) -o $@ $? $(LIBS)
SUFFIEXES : .c .o
.c.o :
$(CC) $(CFLAGS) -c $<
clean :
$(RM) -f $(OBJS)
:q
bash-2.05$ cat Makefile
CC= gcc
CPPFLAGS=
CFLAGS= -ggdb -Wall -O2
INCLUDES=
LIBS= -lpthread
RM=/usr/local/bin/rm
PROGRAM = thread_sample
OBJS = quere.o control.o workcrew.o
all : $(PROGRAM)
$(PROGRAM) : $(OBJS)
$(CC) -o $@ $? $(LIBS)
SUFFIEXES : .c .o
.c.o :
$(CC) $(CFLAGS) -c $<
clean :
$(RM) -f $(OBJS)