首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

复杂的makefile文件,

2012-02-12 
复杂的makefile文件,求助!!头痛,看不懂这个makefile什么意思,是在哪里定义执行命令生成执行文件的,前面那

复杂的makefile文件,求助!!
头痛,看不懂这个makefile什么意思,是在哪里定义执行命令生成执行文件的,前面那个些设置变量的命令是差不多能明白。。


OB_TIER=APP
DB=1
DEBUG=1

###   定义模块主目录和模块名称
###   修改MODULE_COMMON   及   MODULE_COMMON_PATH   为自己在subdef.mk文件中的相应定义
MODULE   =lwx
MODULE_PATH   =$(OB_SRC)/lwx

#指定子系统的路径
#include   $(OB_SRC)/CODE/interface1.5/subdef.mk
BASE_PATH   =   $(OB_SRC)/lwx/protocol
NEW_KFBASE_PATH   =   $(BASE_PATH)/kfwork
OLD_KFBASE_PATH   =   $(BASE_PATH)/1860

BUSINESS_PATH   =   .

OBD_PATH   =   $(MODULE_PATH)/kftask
OBD_PATH   =   .


#   定义目标,目标只需要定义模块名称即可以,其他通过替换来完成
EXEDEST=$(MODULE).bin

PRODDEST=$(EXEDEST)

#   define   db   connection
#修改为自己子系统的数据库连接串
OBD_CONN=ZY

#   define   db   connection//xlg

ORACLEINC   =   -I$(ORACLE_HOME)/rdbms/demo   -I$(ORACLE_HOME)/network/public   -I$(ORACLE_HOME)/rdbms/public

ORACLELIB   =   -L$(ORACLE_HOME)/lib   -L$(ORACLE_HOME)/rdbms/lib/


COMENCRYPT_OBJS   =   $(BASE_PATH)/CompressEncrypt/c_compress_encrypt.o  

PUBLIC_OBJS   =   $(BASE_PATH)/__public/pub_string.o   \
                        $(BASE_PATH)/__public/c_app_error_log.o   \
                        $(BASE_PATH)/__public/c_db_index.o   \
                        $(BASE_PATH)/__public/c_time_cost.o  

PUBLIC_DB_OBJS   =$(BASE_PATH)/__public_db/oracle/c_database.o   \
                        $(BASE_PATH)/__public_db/oracle/c_query.o   \
                        $(BASE_PATH)/__public_db/c_string_grid.o
                       
                       
PUBLIC_INFOBUS_OBJS   =   $(BASE_PATH)/__public_infobus/pub_info_bus.o   \
                        $(BASE_PATH)/__public_infobus/c_bip_custom_packet.o   \
                        $(BASE_PATH)/__public_infobus/c_bip_record_list.o  
                                               

PUBLIC_NET_OBJS   =   $(BASE_PATH)/__public_net/c_critical_section.o   \
                                                                                                      $(BASE_PATH)/__public_net/c_custom_uni_socket.o   \
                                                                                                    $(BASE_PATH)/__public_net/c_server_thread_pool.o\


                                                                                                  $(BASE_PATH)/__public_net/c_thread_serv_socket.o\
                                                                                                  $(BASE_PATH)/__public_net/c_thread.o

PUBLIC_COMPRESS_OBJS   =   ......

ORAINC   =   ......
               
INTER_PUB   =   ......
                                                                                               
#   define   idl   path
PRODIDLPATH   =   ......        
                               
#   define   message   path
PRODMSGPATH   =   $(OB_SRC)/message

#   PRODIDLPATH   and   PRODDEST   must   set   before   this   include
include   $(OB_REL)/etc/Cmake

#自己用到的宏
#PRODDEBUGDEFS=   -D_DEBUG   -D__TESTDETAIL__   -D__TEST__   -D__ORACLECLASS   -DORACLE_DBMS   -D__PPYLOG__   -DEVALUATE_PERFORMANCE   -D__INC_MISCMGNT__   -D__INC_SYSMGNT__   -D__INC_PRIVMGNT__   -D__INC_DATASTRUCT__   -D__INC_SMSSEND__

MYDEBUGDEFS   =   -D__TEST__   -DOBD_C_USE_DYNAMIC_INTF     -D__JXASIA__   -D__MULTI_THREAD__   -DRW_MULTI_THREAD

#   define   definition   when   build   debug
PRODDEBUGDEFS=     -DORACLE_DBMS   -D__PPYLOG__   -DEVALUATE_PERFORMANCE   -DDEBUG   -D__INC_MISCMGNT__   -D__INC_SYSMGNT__   -D__INC_PRIVMGNT__   -D__INC_DATASTRUCT__   -D__INC_SMSSEND__   -D__ORACLECLASS  

PRODDEBUGDEFS   +=   -D_REENTRANT   -D_THREAD_SAFE   -DPTHREADS   -DTHREAD         -DBIT32   -DAIXV3   -DAIXV5   -DOPENBOSS   -DV20   -DJIANGXI_CMCC   -DOTL_ORA9I   -DDB_TYPE_ORA   -DTUXEDO_ATMI   -DOBD_DLL_CALL   -DTEST

PRODDEBUGDEFS   +=   $(MYDEBUGDEFS)

#   define   temp   file.   when   make   clean   it   will   be   clean.
PRODTMPOBJ=

#   define   lib   path
PRODLIBPATH=.   $(OB_REL)/lib

#   define   your   lib
PRODLIBS   =   CbsSysClass$(BUILDTYPE)   OpenBuffer$(BUILDTYPE)               des$(BUILDTYPE)   ObSvrCtrl$(BUILDTYPE)     sockapi$(BUILDTYPE)   mdb$(BUILDTYPE)  


#   define   include   path
PRODINCS=   ......

OBD_OBJS   =     ......
                                                                                                                       


DB_OBJS   =   ......

BUSINESS_OBJ   =   $(BUSINESS_PATH)/Base.o   \
                                                                                                                  $(BUSINESS_PATH)/Query.o   \
                                                                                                                  $(BUSINESS_PATH)/So.o   \
                                                                                                                  $(BUSINESS_PATH)/Intg.o   \
                                                                                                                  $(BUSINESS_PATH)/DetailQuery.o   \
                                                                                                                  $(BUSINESS_PATH)/kf_hlh.o
                                                                                                                 

#   生成的.o   文件列表,必须指定
OBJS=   ......
                                               
C_OBJS=   $(PUBLIC_COMPRESS_OBJS)
                                                 
LDOPTS   +=   -bdynamic     -qstrict   -L$(XERCESCROOT)/lib/   -L$(ORACLE_HOME)/lib32/   -lclntsh   -liconv   -lxerces-c26.0   -lxerces-depdom26.0   -liconv  

$(PRODDEST):$(MAKEDEP_FILE)   $(OBJS)   $(C_OBJS)
                $(LD)   $(OBJS)   $(C_OBJS)   $(LDFLAGS)   $(LDOPTS)   $(ORACLEINC)   $(ORACLELIB)   -o   $@


#   define   dependences
NEEDED_MAKEDEP=$(wildcard   $(MAKEDEP_FILE))
ifeq   ($(NEEDED_MAKEDEP),   $(MAKEDEP_FILE))
                include   $(MAKEDEP_FILE)
endif

PROD_SRC=$(OBJS:.o=.cpp)

PROD_SRC+=$(C_OBJS:.o=.c)

depend:   $(PROD_SRC)  
                $(MKDEP)   $(CXXFLAGS)   $(INCFLAGS)   $^   >   $(MAKEDEP_FILE)
                $(FILTER_MKDEP)

#   define   install   rules
install:$(EXEDEST)
                cp   server.bin   kfserver.bin

[解决办法]
深奥,帮顶
[解决办法]
标记一下,太长了,有时间再看,呵呵
[解决办法]
兄弟,你应该先搞搞简单的makefile
理解后再学习深东西,如果你直接用这个makefile
你还需要很长时间理解
开始就是从简,逐步深入
good luck!
[解决办法]
# 生成的.o 文件列表,必须指定
OBJS= ......

C_OBJS= $(PUBLIC_COMPRESS_OBJS)

LDOPTS += -bdynamic -qstrict -L$(XERCESCROOT)/lib/ -L$(ORACLE_HOME)/lib32/ -lclntsh -liconv -lxerces-c26.0 -lxerces-depdom26.0 -liconv

$(PRODDEST):$(MAKEDEP_FILE) $(OBJS) $(C_OBJS)
$(LD) $(OBJS) $(C_OBJS) $(LDFLAGS) $(LDOPTS) $(ORACLEINC) $(ORACLELIB) -o $@

# define dependences
NEEDED_MAKEDEP=$(wildcard $(MAKEDEP_FILE))
ifeq ($(NEEDED_MAKEDEP), $(MAKEDEP_FILE))
include $(MAKEDEP_FILE)
endif

PROD_SRC=$(OBJS:.o=.cpp)

PROD_SRC+=$(C_OBJS:.o=.c)

depend: $(PROD_SRC)
$(MKDEP) $(CXXFLAGS) $(INCFLAGS) $^ > $(MAKEDEP_FILE)
$(FILTER_MKDEP)

# define install rules
install:$(EXEDEST)
cp server.bin kfserver.bin
这是核心部分.
基本的makefile格式, 前面定义的路径和变量之类的自己去对照就行了.

那些宏有的是定义debug选项, 有的是你对应设备的参数, 自己在相应的项目中找吧.
[解决办法]
帮顶~~~~
[解决办法]
楼主在大作中提到:
# PRODIDLPATH and PRODDEST must set before this include
include $(OB_REL)/etc/Cmake
请问这句是做什么?我只知道在C++里能include ___.h 但上面这条指令也不是用来包含头文件的呀?

$(PRODDEST):$(MAKEDEP_FILE) $(OBJS) $(C_OBJS)
$(LD) $(OBJS) $(C_OBJS) $(LDFLAGS) $(LDOPTS) $(ORACLEINC) $(ORACLELIB) -o $@
在这一句里面也看不懂,makefile里的格式是
目标文件:依赖文件....
生成目标的文件指令...
但是 $(LD) $(OBJS) $(C_OBJS) $(LDFLAGS) $(LDOPTS) $(ORACLEINC) $(ORACLELIB) -o $@ 这一句怎么生成目标文件呢。我们这编译是用xlC_r指令的,但这个里面找不到该指令。

#### Makefile 也可以用include的
####
#### $(LD): 链接编辑程序ld
#### $(OBJS) $(C_OBJS) :.o 文件
#### $(LDFLAGS) $(LDOPTS): ld 选项和库文件目录
#### $(ORACLEINC) $(ORACLELIB):看起来是Oracle的头文件目录和库文件目录
#### -o $@ : 别告诉我你不知道这是什么!:)
####
#### 因为所有的 make 都知道 .c -> .o, .cpp/.C/.cc -> .o 的隐含规则
#### IBM 的 make 一定知道 xlc_r 是缺省的C/C++编译器
[解决办法]
《GNU make中文手册.pdf》

热点排行