トップ/ Unixのお部屋


Makefileの覚え書き

OracleのPro*Cを使ったときのMakefileです。
"sample.pc"から"sample.o"をmakeする推論規則が分からなくって、結構なやみました。
でも、単に"*.pc"から"*.o"をつくる規則をかけばいいだけでした。(^^;)
"*.pc"→"*.c"と"*.c"→"*.o"の規則があれば"*.pc"→"*.o"は、できるのかと思ってました。
結論が分かると、なやんでたのがばかみたいですけどね。
(ってゆーか、ふつーこんなことで悩んだりしないって?)

CFLAGS = -I../include -I./ -I$(ORACLE_HOME)/precomp/public -Wall
LDFLAGS = -L../lib -L$(ORACLE_HOME)/lib
LIBS =
ORA_LIBS = -lclntsh -ln8 -lnl8 -lnro8 -lsql8 -lclient8 \
           -lvsn8 -lcommon8 -lskgxp8 -lgeneric8 -lmm \
           -lnls8 -lcore8 -lplp8 -ltrace8

.SUFFIXES: .o .c .pc	←拡張子規則に使用する拡張子を列挙しておく

PROC = proc
CC = cc

PROCFLAGS = INCLUDE=../include SYS_INCLUDE=/usr/include PARSE=NONE LINE=yes

PCSRCS = sample.pc
SRCS = sample.c
OBJS = sample.o
TARGET = sample

prefix  = 

all: $(TARGET)

$(TARGET): $(OBJS)
	@echo リンク中 $@
	$(CC) -o $@ $(OBJS) $(DEBUG_FLAGS) $(LDFLAGS) $(LIBS) $(ORA_LIBS)
	@echo Done.

.c.o:
	@echo コンパイル中 $<
	$(CC) -c $< $(CFLAGS) $(DEBUG_FLAGS)
	@echo Done.

.pc.c:
	@echo Pro*C コンパイル中 $<
	$(PROC) $(PROCFLAGS) iname=$<
	@echo Done.

.pc.o:	←これがないと、"*.pc"から"*.o"がつくれない(できそうなんだけどね)
	@echo Pro*C コンパイル中 $<
	$(PROC) $(PROCFLAGS) iname=$<
	@echo Done.
	@echo コンパイル中 $<
	$(CC) -c $< $(CFLAGS) $(DEBUG_FLAGS)
	@echo Done.

clean:
        rm -f $(OBJS)
        rm -f $(TARGET)
        rm -f core