分享

编译pro*c 的makefile例子

 紫火神兵 2012-09-14

原来只需在makefile中追加include $(ORACLE_HOME)/precomp/lib/env_precomp.mk,其他一切按照makefile的书写规则即可,CODE也是需要指定的,尤其Oracle缺省并不是ansi_c
以下是sample:
include $(ORACLE_HOME)/precomp/lib/env_precomp.mk
LIBDIR=lib32
CC = /opt/SUNWspro/bin/cc
CFLAGS= -c -g
OCFLAGS= code=ansi_c line=yes sqlcheck=semantics

TARGET= test
OBJS= test.o

.SUFFIXES: .pc .c .o

$(TARGET): $(OBJS)
        $(CC) -o $@ $(OBJS) -L$(LIBHOME)  $(PROLDLIBS)

.pc.c:
        $(PROC) $(ORADEF) $(PROCFLAGS) iname=$*

.pc.o:
        $(PROC) $(ORADEF) $(PROCFLAGS) iname=$* $(ORADEF)
        $(CC) $(CFLAGS) $*.c

.c.o:
        $(CC) $(CFLAGS) $*.c


clean :
        $(RM) -f $(TARGET) $(OBJS) $(TARGET:%=%.c)

==========================下面是个正式项目makefile文件==================

 

include $(ORACLE_HOME)/precomp/lib/env_precomp.mk

COMPILE_MODE = 64

APP_DIR = ..
OBJ_DIR = $(APP_DIR)/obj
CC_DIR  = $(APP_DIR)/cc
EXE_DIR = $(APP_DIR)/bin
SRC_DIR = $(APP_DIR)/src

ORA_PRE_HEAD=   $(ORACLE_HOME)/precomp/public/
ORA_OCI_HEAD =  $(ORACLE_HOME)/rdbms/public/
ORA_LIB_DIR  =  $(ORACLE_HOME)/lib
ORA_LIB_FLAG = -lclntsh -locci

OCICPP_LIB_HEAD =  $(APP_DIR)/include/ocicpp
OCICPP_LIB_DIR  =  $(APP_DIR)/lib
OCICPP_LIB_FLAG =  -locicpp$(COMPILE_MODE)

DCETL_HEAD      =  $(APP_DIR)/include/dcetl
DCETL_LIB_DIR   =  $(APP_DIR)/lib
DCETL_LIB_FLAG  = -ldcetl$(COMPILE_MODE)

CXX = xlC -DISUNIX -DDONT_HAVE_STRUPR
COMPILE_FLAGS =  -c -q$(COMPILE_MODE)  -qstaticinline -bhalt:5 -lnoquiet -g -bhalt:5 -bmaxdata:0x100000000 -DCOMPILE_MODE=$(COMPILE_MODE)
LINKING_FLAGS =  -q$(COMPILE_MODE) -qstaticinline -bhalt:5 -g -bmaxdata:0x100000000

PROCPLSFLAGS  = code=cpp cpp_suffix=cc sqlcheck=syntax parse=none lname=err
ARFLAGS  =  -v -q

# Command ----------------------------------------------------------------------
PROC  = proc

###########################  compile cpp #############################################
all : CommonDemo DbDemo DCEtlDemo PathTest
APP_NAME = CommonDemo DbDemo DCEtlDemo Test PathTest

$(APP_NAME) :
 $(CXX) $(COMPILE_FLAGS) $(APP_DIR)/$@.cpp /
  -I$(ORA_OCI_HEAD) -I$(OCICPP_LIB_HEAD) -I$(DCETL_HEAD) /
  -o $(OBJ_DIR)/$@.o

 $(CXX) $(LINKING_FLAGS) $(OBJ_DIR)/$@.o /
    -o $(EXE_DIR)/$@ /
    -L$(DCETL_LIB_DIR) $(DCETL_LIB_FLAG) /
    -L$(ORA_LIB_DIR) $(ORA_LIB_FLAG) /
    -L$(OCICPP_LIB_DIR) $(OCICPP_LIB_FLAG)

###########################  compile Pro*C/C++ ##########################################
PROC_NAME = helloworld DCETLScheduler DCETLInstAnalyse DCETLInitFlow /
   etlInit etlSchedule etlAnalyse /
   etlInit_temp etlSchedule_temp etlAnalyse_temp /
   etlAudit /
   rptStream /
   rptStreamInst /
   rptTaskInst

$(PROC_NAME) :
 $(PROC) $(PROCPLSFLAGS) iname=$(APP_DIR)/$@.pc oname=$(CC_DIR)/$@.cc INCLUDE=$(APP_DIR)
 $(CXX) $(COMPILE_FLAGS) $(CC_DIR)/$@.cc /
       -I$(APP_DIR) /
    -I$(ORA_PRE_HEAD) /
    -I$(DCETL_HEAD)  /
    -I$(DC_OLD_HEAD) /
    -o $(OBJ_DIR)/$@.o
 $(CXX) $(LINKING_FLAGS) $(OBJ_DIR)/$@.o /
    -o $(EXE_DIR)/$@ /
    -L$(ORA_LIB_DIR) $(ORA_LIB_FLAG)
    -L$(DCETL_LIB_DIR)  $(DCETL_LIB_FLAG) /
    -L$(OCICPP_LIB_DIR) $(OCICPP_LIB_FLAG)

###########################  compile my ETL base lib #################################
base:    IniFile DCFtpClient DCFtpUtils DCUtils DCArgsParser DCLogger DCLoggerDb  DCEtlBase release_base
BASE_CLASS = IniFile DCUtils DCArgsParser DCLogger DCLoggerDb DCFtpClient DCFtpUtils DCEtlBase

$(BASE_CLASS) :
 $(CXX) $(COMPILE_FLAGS) $(SRC_DIR)/dcetl/$@.cpp -I$(ORA_OCI_HEAD) /
   -I$(OCICPP_LIB_HEAD)  /
   -I$(DCETL_HEAD)  /
   -o $(OBJ_DIR)/dcetl/$@.o

release_base:
 rm -f $(OCICPP_LIB_DIR)/libdcetl$(COMPILE_MODE).a
 ar -X$(COMPILE_MODE) $(ARFLAGS) $(DCETL_LIB_DIR)/libdcetl$(COMPILE_MODE).a $(OBJ_DIR)/dcetl/*.o

#####################################################################################

clean:
 rm -f $(OBJ_DIR)/*.o

list :
 ls -l $(APP_DIR)/*.c*
 ls -l $(APP_DIR)/*.pc

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多