一个MAKEFILE的详细解释

来源:互联网 发布:用linux打开文件命令 编辑:程序博客网 时间:2024/06/07 03:37

#定义变量CC
CC = g++

#############################################################
#定义变量 ‘$’引用变量,-I 给出变量的路径。  \ 连接符
HOMEPATH = $(TEDO_HOME)
OBJPATH = $(HOMEPATH)/obj
BINPATH = $(HOMEPATH)/bin
LIBPATH = $(HOMEPATH)/lib
SRCPATH = ./src
INCPATH =  $(COMMONCPP2_INCLUDE) \
           -I./include \
           -I$(HOMEPATH)/public/base_component/inc  \
          -I$(HOMEPATH)/serv/procstep/include \
          -I$(HOMEPATH)/serv/EntityLib/SCS_ET/include \
          -I$(HOMEPATH)/serv/EntityLib/PUB_ET/include \
          -I$(HOMEPATH)/serv/EntityLib/CUM_ET/include \
          -I$(HOMEPATH)/serv/EntityLib/PDM_ET/include \
          -I$(HOMEPATH)/serv/EntityLib/EBK_ET/include
#include  包含其他的makefile文件
include ../Makefile.serv

#-l-->指定连接时期望连接的库的名字
#-L-->指定连接库的搜索路径
#-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了。


LINKLIB = -L$(LIBPATH) -lbase -lclient -lprocstep
## -lrsautl
         
CXXFLAGS = $(COMMONCPP2_COMPILE_FLAG) 
APP_COMPILE = $(CC) $(CXXFLAGS)  -DNDEBUG -g -O2 -pipe
#makefile 命令参数-fPIC 作用: 当使用.so等类的库时,当遇到多个可执行文件共用这一个库时, 在内存中,这个库就不会被复制多份,让每个可执行文件一对一的使用,
#而是让多个可执行文件指向一个库文件,达到共用. 宗旨:节省了内存空间,提高了空间利用率
FPIC=-fPIC

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

#############################################################
.PHONY: all all-before all-after clean clean-custom

LINKOBJ = $(OBJPATH)/ScsDiscinfoBuffer.o           \
          $(OBJPATH)/op_scs_allotinform.o           \
          $(OBJPATH)/op_scs_base.o                  \
          $(OBJPATH)/op_scs_begindelivery.o         \
          $(OBJPATH)/op_scs_buildinform.o           \
          $(OBJPATH)/op_scs_buildtouch.o            \
          $(OBJPATH)/op_scs_buildupdate.o           \
          $(OBJPATH)/op_scs_checkalter.o            \
          $(OBJPATH)/op_scs_correct_order.o         \
          $(OBJPATH)/op_scs_dealinform.o            \
          $(OBJPATH)/op_scs_deliveryinf.o           \
          $(OBJPATH)/op_scs_enddelivery.o           \
          $(OBJPATH)/op_scs_forderinfooper.o        \
          $(OBJPATH)/op_scs_fqtouch.o               \
          $(OBJPATH)/op_scs_informdetails.o         \
          $(OBJPATH)/op_scs_invoiceinfooper.o       \
          $(OBJPATH)/op_scs_moddelivery.o           \
          $(OBJPATH)/op_scs_modorder.o              \
          $(OBJPATH)/op_scs_order.o                 \
          $(OBJPATH)/op_scs_orderinfooper.o         \
          $(OBJPATH)/op_scs_querytouch.o            \
          $(OBJPATH)/op_scs_querytouchrec.o         \
          $(OBJPATH)/op_scs_tradeorder.o            \
          $(OBJPATH)/op_scs_orderproc.o             \
          $(OBJPATH)/op_scs_querytrade.o            \
          $(OBJPATH)/op_scs_printinvoice.o          \
          $(OBJPATH)/op_scs_querydelivery.o         \
          $(OBJPATH)/op_scs_referinform.o           \
          $(OBJPATH)/op_scs_querysimpleinform.o     \
          $(OBJPATH)/op_scs_pehistoryqry.o          \
          $(OBJPATH)/op_scs_mgrorderqry.o           \
          $(OBJPATH)/op_scs_manu_reverse.o           \
          $(OBJPATH)/op_scs_batchbuildtouch.o       \
          $(OBJPATH)/op_scs_whtouch.o               \
          $(OBJPATH)/op_scs_order_hist.o            \
          $(OBJPATH)/op_scs_generateorder.o         \
          $(OBJPATH)/op_scs_merchandiseorder.o        
          
#all作用: 是终极目标, 所有终极目标都依赖于all后的冒号之后的内容. 如果在冒号后没有的内容,在make时,即使写在文档里也不执行.


all: ScsDiscinfoBuffer.o op_scs_allotinform.o op_scs_base.o op_scs_begindelivery.o op_scs_buildinform.o op_scs_buildtouch.o op_scs_buildupdate.o op_scs_checkalter.o  op_scs_dealinform.o op_scs_deliveryinf.o op_scs_enddelivery.o op_scs_forderinfooper.o op_scs_fqtouch.o op_scs_informdetails.o op_scs_invoiceinfooper.o op_scs_moddelivery.o op_scs_modorder.o op_scs_order.o op_scs_orderinfooper.o op_scs_querytouch.o op_scs_querytouchrec.o op_scs_tradeorder.o op_scs_orderproc.o op_scs_whtouch.o op_scs_querytrade.o op_scs_printinvoice.o op_scs_querydelivery.o op_scs_referinform.o op_scs_querysimpleinform.o \
     op_scs_pehistoryqry.o op_scs_mgrorderqry.o op_scs_manu_reverse.o op_scs_batchbuildtouch.o op_scs_correct_order.o op_scs_order_hist.o op_scs_generateorder.o op_scs_merchandiseorder.o S_SCS.so

clean: clean-custom
 ${RM} $(OBJ)

ScsDiscinfoBuffer.o:
   $(CC) -o $(OBJPATH)/ScsDiscinfoBuffer.o -c $(SRCPATH)/ScsDiscinfoBuffer.cpp  \
  $(INCPATH) \
  $(DB_INCLUDE) $(FPIC)
  
op_scs_allotinform.o:
   $(CC) -o $(OBJPATH)/op_scs_allotinform.o -c $(SRCPATH)/op_scs_allotinform.cpp  \
  $(INCPATH) \
  $(DB_INCLUDE) $(FPIC)

op_scs_base.o:
   $(CC) -o $(OBJPATH)/op_scs_base.o -c $(SRCPATH)/op_scs_base.cpp  \
  $(INCPATH) \
  $(DB_INCLUDE) $(FPIC) 
  
op_scs_begindelivery.o:
   $(CC) -o $(OBJPATH)/op_scs_begindelivery.o -c $(SRCPATH)/op_scs_begindelivery.cpp  \
  $(INCPATH) \
  $(DB_INCLUDE) $(FPIC) 

  op_scs_printinvoice.o:
   $(CC) -o $(OBJPATH)/op_scs_printinvoice.o -c $(SRCPATH)/op_scs_printinvoice.cpp  \
  $(INCPATH) \
  $(DB_INCLUDE) $(FPIC)
  
op_scs_querydelivery.o:
   $(CC) -o $(OBJPATH)/op_scs_querydelivery.o -c $(SRCPATH)/op_scs_querydelivery.cpp  \
  $(INCPATH) \
  $(DB_INCLUDE) $(FPIC)

op_scs_referinform.o:
   $(CC) -o $(OBJPATH)/op_scs_referinform.o -c $(SRCPATH)/op_scs_referinform.cpp  \
  $(INCPATH) \
  $(DB_INCLUDE) $(FPIC)

op_scs_querysimpleinform.o:
   $(CC) -o $(OBJPATH)/op_scs_querysimpleinform.o -c $(SRCPATH)/op_scs_querysimpleinform.cpp  \
  $(INCPATH) \
  $(DB_INCLUDE) $(FPIC)
  
op_scs_pehistoryqry.o:
   $(CC) -o $(OBJPATH)/op_scs_pehistoryqry.o -c $(SRCPATH)/op_scs_pehistoryqry.cpp  \
  $(INCPATH) \
  $(DB_INCLUDE) $(FPIC)
  

op_scs_generateorder.o:
   $(CC) -o $(OBJPATH)/op_scs_generateorder.o -c $(SRCPATH)/op_scs_generateorder.cpp  \
  $(INCPATH) \
  $(DB_INCLUDE) $(FPIC)
  
op_scs_merchandiseorder.o:
   $(CC) -o $(OBJPATH)/op_scs_merchandiseorder.o -c $(SRCPATH)/op_scs_merchandiseorder.cpp  \
  $(INCPATH) \
  $(DB_INCLUDE) $(FPIC)
  
S_SCS.so:
  $(APP_COMPILE) $(SO_SERVFLAG) -o $(LIBPATH)/S_SCS.so  $(SRCPATH)/SCS.cpp  \
  $(INCPATH) \
  $(DB_INCLUDE) \
  $(LINKOBJ) \
  $(LINKLIB) \
    $(OBJPATH)/pub_et.a \
    $(OBJPATH)/scs_et.a \
    $(OBJPATH)/cum_et.a \
    $(OBJPATH)/pdm_et.a \
    $(OBJPATH)/ebk_et.a \
    -L$(LIBPATH)
   
   
#    $(OBJPATH)/apps.o
#    $(OBJPATH)/app_rand.o \
#    $(OBJPATH)/rsautl.o \
#    -L/platform/kernel_source/lib -lssl  -L/platform/kernel_source/lib -lcrypto  \
#    /platform/kernel_source/lib/encrypt_dev.a