当前位置:  技术问答>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

|
楼主在大作中提到:
# 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选项, 有的是你对应设备的参数, 自己在相应的项目中找吧.

|
《GNU make中文手册.pdf》

|
深奥,帮顶

|
标记一下,太长了,有时间再看,呵呵

|
兄弟,你应该先搞搞简单的makefile
理解后再学习深东西,如果你直接用这个makefile
你还需要很长时间理解
开始就是从简,逐步深入
good luck!

|
帮顶~~~~

    
 
 

您可能感兴趣的文章:

  • 求助:makefile,驱动与linux内核的关系?
  • 高分求助!!这个makefile怎么写?
  • 急!求助,关于makefile的问题
  • 求助,关于如何写Makefile
  • (求助)Makefile 中如何获得系统命令结果
  • 初学makefile 的问题,求助
  • 求助Makefile调试
  • 关于makefile 文件的求助
  • MAKEFILE求助
  • 求助:configure生成的Makefile支持多系统
  • 求助,简单驱动的makefile
  • MAKEFILE求助,LINUX下如何将多个.a文件合并为一个.a文件或者.lib文件
  • 求助基础问题:CUDA的makefile怎么写?
  • 求助以下makefile语句解释(急!急!急!)
  • 问个makefile的问题啊?求助!
  • 求助:一个makefile,大虾们进来看看
  • 求助makefile的问题
  • 菜鸟求助makefile相关
  • 求助 makefile 中一行命令
  • [求助大牛]在makefile文件中输入sed,语法有问题。。。
  • makefile.am和makefile.in是什么文件,与makefile有什么联系吗?
  • makefile如何调用文件目录下的makefile
  • 从网上载了个C++程序的源代码,包含38个.cpp和.h,还有makefile.in和makefile.am两个文件,但无configure和makefile.请问怎么编译?谢谢!
  • 【急!】一个程序里有好多文件夹里都有Makefile,如何找到最管用的makefile
  • unix下面make makefile文件,提示“makefile is up-to-date",怎么办呀?
  • 关于makefile的问题。一个makefile如何生成两个可执行文件。
  • makefile文件与批处理文件
  • 关于makefile文件的问题
  • Makefile文件,是不是很重要?
  • 自动生成makefile的问题, C文件成功,但CPP文件失败,请指点.谢谢.
  • 急~~~~~ 如何用Makefile.in文件
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Makefile.in,Makefile.am,Makefile.bor应该怎么用?
  • 最近在学习linux C 看到了makefile部分,觉得makefile的语法很难理解,Makefile 的语法是不是shell语法?
  • 求解makefile问题,makefile.conf的作用?
  • 有makefile.am,有 makefine.in 为什么就是没有Makefile?
  • 请教根据Makefile.am自动生成Makefile的问题
  • 怎麼樣使Makefile.in生成Makefile?
  • 【makefile使用】请问怎样在shell中获取makefile的最终目标?
  • Makefile使用遇到的问题!"Makefile:3:missing the separator.stop"在线等待.......
  • Makefile是如何输出执行的路径的,表示执行的是那个Makefile
  • 下的tar.gz源码里只有makefile.in和makefile.am
  • 一句 makefile 的解释 -- makefile 与 shel 结合
  • linux makefile error :Makefile:335: *** commands commence before first target。
  • [test@localhost ~]$ cat <makefile >catfile 跟cat > catfile <makefile是一样的吧?
  • 自动生成makefile的问题, C文件成功,但CPP文件失败,请指点.谢谢. iis7站长之家
  • win32下编译Linux 下的项目(makefile.am和makefile.in)
  • make -f makefile 时提示 Make: Must be a separator on rules line 5. Stop. 为什么,makefile 如下
  • 请问如何写动态的Makefile,或是有什么好的Makefile写法?麻烦分享一下,谢谢
  • Makefile :scripts/Makefile.build:49: *** CFLAGS was changed in "/opt/zaptel-1.4.
  • makefile include的问题
  • linux中makefile大小写问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3