Linux平台上编译proc*c 代码用的Makefile

自用的用来编译pro*c 代码的makefile, 包括2个部分,一个是common.mak, 定义一些共通属性,一个则是用来编译main程序。

 

1. common.mak

.SUFFIXES: .pc .c
vpath %.h ../inc
vpath %.tbl ../tbl

CC = gcc
PROC = proc
LD = ld
RM = rm -f

DEBUGFLAG = -g
CFLAGS = -W -Wall -DISA_DEBUG -c
PROC_CFLAGS =

INC = ../inc
TBL = ../tbl
OBJ = ../obj
OUT = ../bin
LIB = ../lib

INCLUDE_PATH = -I$(ORACLE_HOME)/rdbms/public/ -I$(INC)/ -I$(TBL)/

.pc.c:
	proc common_parser=yes include=$(INC)/ include=$(TBL)/ iname=$*.pc

 

 

2. 编译主程序用的makefile

.PHONY : all clean

ROOT_DIR = ../
include $(ROOT_DIR)/common.mak

PROG = xxxx

EXE = $(OUT)/$(PROG)

OBJS = $(OBJ)/$(PROG).o
GEN_SRC = $(PROG).c $(PROG).lis

all : $(EXE)

$(EXE) : $(OBJS)
	$(CC) -o $@ -L $(ORACLE_HOME)/lib -lclntsh $(OBJS) $(LIB)/libkozacomm.a

$(OBJS) : $(PROG).c xxx.tbl   xxx.h
	$(CC) $(CFLAGS) $(DEBUGFLAG) $(INCLUDE_PATH) -o $@ $<
	
clean:
	$(RM) $(OBJS)
	$(RM) $(EXE)
	$(RM) $(GEN_SRC)

 

 

 3. 如果有一堆主程序要编译,就把他们放在不同子目录下,然后在根目录下创建如下makefile

SUBDIRS = common \
		aaa bbb \
		ccc

.PHONY : all clean $(SUBDIRS)

all : $(SUBDIRS)

$(SUBDIRS):
	$(MAKE) -C $@

clean:
	for dir in $(SUBDIRS); do \
		$(MAKE) -C $$dir clean; \
	done

 

 

注意点

1. pro*c 的编译参数common_parser=yes, 没有的话会对sql99的语法报错。

2. 想要编译时候检查语法错误需加SQLCHECK={SEMANTICS | FULL | SYNTAX | LIMITED}

例:

sqlcheck=full userid=useid/xxx@orclxxx common_parser=yes

 

 

你可能感兴趣的:(makefile)