#通用 make file
OS_NAME = $(shell uname -s)
##一、指定常用系统命令
AR := ar
SED:= sed
AWK:= awk
MV := mv
RM := rm -f
ECHO := echo
##二、C编译器选项
#指定编译器
CC := gcc
#指定编译器选项
CFLAGS := -c -g -W -Wall
#CFLAGS := -c -g
#指定C于编译器
CPP :=
#指定C于编译器选项
CPPFLAGS :=
##三、指定额外搜索的头文件路径、库文件路径 、引入的库
# The include files ( C and C++ common).
#INCLUDES := -I./inc -I/usr/local/include -I/usr/local/include/linphone -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include
INCLUDES := -I./inc -I/usr/local/include -I/usr/local/include/linphone -I/usr/include/dbus-1.0 -I/usr/lib/i386-linux-gnu/dbus-1.0/include
# 指定函数库搜索路径
LIBDIRS := -L/usr/local/lib -L./lib
# 链接器参数
CLDFLAGS := -llinphone -lmediastreamer_base -lmediastreamer_voip -lortp -lpthread -lrt -lasound -lm -ldbus-1 -lsdkapi
#宏定义
DCPPFLAGS := -D${OS_NAME}
#四、指定源文件的路径 、支持的源文件的扩展名 、源文件搜索路径
#指定源文件的路径
SRC_DIR := ./src
#支持的源文件的扩展名
SFIX := .c
VPATH := ${SRC_DIR}
#五、得到源文件名称集合、OBJS目标文件名集合
#得到源文件集合(带路径)
SOURCES := $(foreach x,${SRC_DIR}, $(wildcard $(addprefix ${x}/*, ${SFIX})))
#去掉路径信息,去掉扩展名,再追加.o的扩展名,得到目标文件名集合(不带路径)
OBJS := $(addsuffix .o ,$(basename $(notdir ${SOURCES})))
#六、定义生成程序的名称
TARGET := gateway_voip
#七、 定义依赖关系 ,编译、链接规则
.PHONY : all clean
#定义编译、链接任务all
all : ${TARGET}
#链接
${TARGET} : ${OBJS}
# echo ${OBJS}
${CC} -o $@ ${OBJS} ${LIBDIRS} ${CLDFLAGS}
${OBJS}:%.o:%.c
# echo $<
${CC} ${CFLAGS} $< -o $@ ${INCLUDES}
# Rules for producing the objects. (.o) BEGIN
#%.o : %.c
# ${CC} ${DCPPFLAGS} ${CFLAGS} ${INCLUDES} $<
#定义清理的任务,rm命令前面加了一个小减号的意思就是, 也许某些文件出现问题,但不要管,继续做后面的事
clean:
-${RM} *.o ${TARGET}