########################################################################
# 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