Makefile编写

######################################################################## 
# other:变量的定义,就相当于宏定义
#一、相关说明
#1.后缀规则:是一种老风格定义隐含规则的方式,新版本的make中使用模式规则取代了这种实现
#    方式,模式规则和它相比更加清晰明了
#    1.1后缀规则有两种类型:“双后缀”和“单后缀”。
#        例如:.SUFFIXES: .c .o  (给make添加一个后缀规则,不影响又有的后缀规则)
#              .c.o:  价于模式规则'%o : %c'   把所有的[.c]文件都编译成[.o]文件    
#2.自动化变量
#    2.1.说明: 所谓自动化变量,就是这种变量会把模式中所定义的一系列的文件自动地挨个取出,直至所有的符合模式的文件都取完了。这种自动化变量只应出现在规则的命令中。
#
#    2.2.列举:
#            $@ 表示规则中的目标文件集(冒号前面)。 在模式规则中,如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。 
#            $< 依赖目标中的第一个目标名字(冒号后面)。 如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集。注意,其是一个一个取出来的。
#            $^ 所有的依赖目标的集合(冒号后面)。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份
#            $* 这个变量表示目标模式中"%"及其之前的部分(冒号前面)。那么"$*"就是除了后缀的那一部分。例如:如果目标是"foo.c",因为".c"是make所能识别的后缀名,所以,"$*"的值就是"foo"。
#        四个变量($@、$<、$%、$*)在扩展时只会有一个文件
#二、规则的语法
#targets : prerequisites
#command
#...
#或是这样:
#targets : prerequisites ; command
#command
#
三.目录分布
tts_interface
  |--include
    |--*.h
  
|--eng_libs
    |--*.so *.a
  |--src
    |--*.c
  |--tools
    |--*.h *.c

#
#
#
############ make file mod_tts############ 
#root for mod_tts project #
PROJECT_DIR=../../tts_interface

OBJS_DIR=./
SRC_INCLUDE=$(PROJECT_DIR)/include
TOOLS_INCLUDE=$(PROJECT_DIR)/tools

#平台依赖库
LIB_DIR=$(PROJECT_DIR)/ENG_libs
#TTS依赖库
LIB_TTS_DIR=$(PROJECT_DIR)/libs

INCLUDES=-I${SRC_INCLUDE} \
-I${TOOLS_INCLUDE}

######################################################################## 
#添加PATH搜索路径
#特殊变量“VPATH”  make就会
#在当当前目录找不到的情况下,到所指定的目录中去找寻文件了
VPATH=$(PROJECT_DIR):$(BASS):$(LIB_TTS_DIR):$(LIB_DIR):$(OBJS_DIR)
      

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

CCC=g++  \
    -O0    \
    -g \
    -Wall \
    -Wno-sign-compare \
    -lpthread -Wno-deprecated \
    -qfPIC -D UNIX \
    -DNO_SOUND \
    -DNO_ACC_BACKUP -DISDTLIB \
    -D_ISDTLIB -DINSTANTINTE_TEMPLATES \
    -D_CRT_SECURE_NO_DEPRECATE \
    $(INCLUDES) 
    

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

ALL_OBJS=\
    mod_util.o \
    mod_tts.o \
    comdition.o \
    thread.o \
    testMain.o 

LIBALL=-L$(LIB_DIR)/lib -lguide -L$(LIB_TTS_DIR) -lTTS_API -lpthread

compile: $(ALL_OBJS)
    @echo compile complete!

build:testMainTTS
    @echo builder complete!
#make自动推导依赖目标
testMainTTS: $(ALL_OBJS)
    $(CCC) -o testMainTTS  $(ALL_OBJS) $(LIBALL)

clean:
    -rm  *.o
    -rm  testMainTTS

######################################################################## 
#"$@"表示所有的目标的挨个值(冒号前面)
#"$<"表示了所有依赖目标的挨个值,就是源文件,每次从模式目标集合中取一执行(冒号后面)
#"$*"表示目标模式中,除了后缀的那一部分(只取文件名,不带后缀)(冒号前面)
.SUFFIXES: .c .o
.c.o:
    @echo Compile file $<, `more $<|wc -l`  lines ....
    @$(CCC) $(CCFLAGS) -o $(OBJS_DIR)/$*.o

    
#OTHER impl
#此模式未使用到
#%o:%.cpp;$(CC) -c $(CFLAGS) $<
#LINK_IMP=$(CC) $(CFLAGS) $(LIB_DIR) -o $@ $^ -lpthread
##此处:$@为 mod_tts_so; $< 为 util.c  testMain.c  base.c
#
#OBJECT=util.c  testMain.c  base.c
#mod_tts_so:$(OBJECT)
#    ${LINK_IMP}
##.c.o:把所有的[.c]文件都编译成[.o]文件
########################## makefile end ################################1

 

posted @ 2019-03-17 17:31  小菜77  阅读(184)  评论(0)    收藏  举报