欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-19 19:26:04
...

自用的用来编译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