当前位置: 技术问答>linux和unix
复杂的makefile文件,求助!!
来源: 互联网 发布时间:2016-01-21
本文导语: 头痛,看不懂这个makefile什么意思,是在哪里定义执行命令生成执行文件的,前面那个些设置变量的命令是差不多能明白。。 OB_TIER=APP DB=1 DEBUG=1 ### 定义模块主目录和模块名称 ### 修改MODULE_COMMON 及 MODULE_COMMON_PATH...
头痛,看不懂这个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=/tech-qa-linux/$/index.html(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
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=/tech-qa-linux/$/index.html(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
|
楼主在大作中提到:
# 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++编译器
# 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++编译器
|
# 生成的.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=/tech-qa-linux/$/index.html(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选项, 有的是你对应设备的参数, 自己在相应的项目中找吧.
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=/tech-qa-linux/$/index.html(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选项, 有的是你对应设备的参数, 自己在相应的项目中找吧.
|
《GNU make中文手册.pdf》
|
深奥,帮顶
|
标记一下,太长了,有时间再看,呵呵
|
兄弟,你应该先搞搞简单的makefile
理解后再学习深东西,如果你直接用这个makefile
你还需要很长时间理解
开始就是从简,逐步深入
good luck!
理解后再学习深东西,如果你直接用这个makefile
你还需要很长时间理解
开始就是从简,逐步深入
good luck!
|
帮顶~~~~