Linux平台上编译proc*c 代码用的Makefile
程序员文章站
2022-05-19 19:58:17
...
自用的用来编译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