您的位置:首页 > 其它

pro*c makefile 编写

2010-05-13 13:24 190 查看
该makefile 只是在linux 中测试过, 若采用hu-ux 只要以下makefile中的gcc 改为aCC 但

hu-ux 未测试

1、首先确定pro*c 工程目录结构

proc/bin

proc/include

proc/lib

proc/src

src/libsrc

src/project_src

.........

以下makefile 相关文件都是放在底层文件夹下,需要新建源代码文件夹请在src 文件夹下创建

对应的makefile

PRJHOME=../..
.SUFFIXES:.c .pc .o

CC=gcc
CFLAG=-c
PROC=proc
PFLAG=mode=ansi
#PPOOL=cpool=yes
#PTHREAD=threads=yes

LIBDIR=-L${PRJHOME}/lib
INCLDIR=-I${PRJHOME}/include
ORA_INCL=-I${ORACLE_HOME}/precomp/public
ORA_LIB=-L${ORACLE_HOME}/lib -lclntsh

.c.o:
${CC} ${CFLAG} -o $@ $< ${INCLDIR}
.pc.o:
${PROC} ${PFLAG} $< include=${PRJHOME}/include
${CC} ${CFLAG} -o $@ ${<:.pc=.c} ${INCLDIR} ${ORA_INCL}
rm -f ${<:.pc=.c}

LIBS=

EXEC=${CC} -o $@ $^ ${INCLDIR} ${LIBDIR} ${LIBS} ${ORA_INCL} ${ORA_LIB};/
rm -f *.o /
rm -f tp?????? /
rm -f *.lis /
mv $@ ${PRJHOME}/bin;

BINS= ${LINE_NAME} /

all:	$(BINS)

PC_SRC0= ${LINE_NAME}.pc
OBJ0=$(PC_SRC0:.pc=.o)

${LINE_NAME}:${OBJ0}
${EXEC}

clean:
rm -f *.o
rm -f tp??????
rm -f *.lis


对应的makeproc

#!/bin/sh
if [ $# == 1 ] && [ $1 == 'clean' ]
then
rm -f *.c
rm -f tp??????
rm -f *.lis
rm -f *.o
exit 0
fi
typeset -i A=0 B=0
if [ $# != 0 ]
then
for i in `echo $@`
do
LINE_NAME=$i
export LINE_NAME
make >>log_make.log
if [ $? = 0 ]
then
A=A+1
echo -e "[`date '+%Y-%m-%d %T'`][$LINE_NAME]:编译成功"
else
B=B+1
echo -e "[`date '+%Y-%m-%d %T'`][$LINE_NAME]:编译失败"
fi
done
else

while read LINE
do
LINE_NAME=$LINE
if [ -z ${LINE_NAME} ]
then
continue
fi
if [ `echo ${LINE_NAME:0:1}` == '#' ]
then
continue
fi
export LINE_NAME
make >>log_make.log
if [ $? = 0 ]
then
A=A+1
echo -e "[`date '+%Y-%m-%d %T'`][$LINE_NAME]:编译成功"
else
B=B+1
echo -e "[`date '+%Y-%m-%d %T'`][$LINE_NAME]:编译失败"
fi
done<list
fi
echo -e "/n==============成功 $A 条 /n==============失败 $B 条 /n"


将上面两个文件放到文件夹下,同时在文件夹下创建list文件,用来存放需要编译的作业名

例如pro*c 文件名为procname.pc 那么list就在一行中存放procname

使用方法:若需要对指定*.pc 编译采用./makeproc procname

若需要对批量*.pc编译 采用./makeproc 将编译依次编译list中列出的pc文件

若list 中某个指定PC需要跳过编译,只需要注释该作业名称 注释标识用#

编译后的日志文件会写在log_makefile.log 文件中

同时提醒该makefile 采用ansi 模式,故sqlca.sqlcode 空判断值为100 而非1043

对于pro*c多线程需要修改该makefile 将注释的参数释放 并加入到proc 命令行中去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: