Makefile生成多个可执行程序

# 不用前缀 :: 输出执行的命令以及命令执行的结果, 出错的话停止执行
# 前缀 @   :: 只输出命令执行的结果, 出错的话停止执行
# 前缀 -   :: 命令执行有错的话, 忽略错误, 继续执行

#调试信息
# FILE="============xt============="
# $(info $(FILE))  #info信息,不会打印行号
# $(warning $(FILE))  #warning信息会显示行号
#$(error $(FILE))  #error信息会导致编译终止及退出,适合分步调试问题
#echo信息只能在aaa:后面使用,并且前面需要增加一个tab键
# aaa:
# 	@echo "==========xt1============="
# 	@echo "$(FILE)"

DEUBG = -D_DEBUG

TARGET1 = rtsp_server
TARGET2 = rtsp_pusher
TARGET3 = rtsp_h264_file

OBJS_PATH = objs

CROSS_COMPILE =
CXX   = $(CROSS_COMPILE)g++
CC    = $(CROSS_COMPILE)gcc
STRIP = $(CROSS_COMPILE)strip

INC  = -I$(shell pwd)/src/ -I$(shell pwd)/src/net -I$(shell pwd)/src/xop -I$(shell pwd)/src/3rdpart
LIB  =
LD_FLAGS  = -lrt -pthread -lpthread -ldl -lm $(DEBUG)
CXX_FLAGS = -std=c++11
O_FLAG = -O0
CFLAGS += -D_DEBUG
#notdir 用于去掉文件的绝对路径,只保留文件名。
#$(patsubst 原模式, 目标模式, 文件列表)
#patsubst 函数用于将文件模式进行替换。
#wildcard 通配符会被自动展开

# 1、wildcard : 扩展通配符
# 2、notdir : 去除路径
# 3、patsubst :替换通配符
SRC1  = $(notdir $(wildcard ./src/net/*.cpp))
OBJS1 = $(patsubst %.cpp,$(OBJS_PATH)/%.o,$(SRC1))

SRC2  = $(notdir $(wildcard ./src/xop/*.cpp))
OBJS2 = $(patsubst %.cpp,$(OBJS_PATH)/%.o,$(SRC2))

SRC3  = $(notdir $(wildcard ./example/rtsp_server.cpp))
OBJS3 = $(patsubst %.cpp,$(OBJS_PATH)/%.o,$(SRC3))

SRC4  = $(notdir $(wildcard ./example/rtsp_pusher.cpp))
OBJS4 = $(patsubst %.cpp,$(OBJS_PATH)/%.o,$(SRC4))

SRC5  = $(notdir $(wildcard ./example/rtsp_h264_file.cpp))
OBJS5 = $(patsubst %.cpp,$(OBJS_PATH)/%.o,$(SRC5))

# rules
#$@ 表示规则中的目标文件集  目标文件
#$^ 所有的依赖目标的集合。以空格分隔。 .o文件
#$< 依赖目标中的第一个目标名字   .c/.cpp
# $+ 这个变量很像$^,也是所有依赖目标的集合,只是它不去除重复的依赖目标。
# $(info $(OBJS))  打印信息
all: BUILD_DIR $(TARGET1) $(TARGET2) $(TARGET3)

BUILD_DIR:
	@-mkdir -p $(OBJS_PATH)

$(TARGET1) : $(OBJS1) $(OBJS2) $(OBJS3)
	$(CXX) $^ -o $@ $(CFLAGS) $(LD_FLAGS) $(CXX_FLAGS)
$(TARGET2) : $(OBJS1) $(OBJS2) $(OBJS4)
	$(CXX) $^ -o $@ $(CFLAGS) $(LD_FLAGS) $(CXX_FLAGS)
   
$(TARGET3) : $(OBJS1) $(OBJS2) $(OBJS5)
	$(CXX) $^ -o $@ $(CFLAGS) $(LD_FLAGS) $(CXX_FLAGS)
    
$(OBJS_PATH)/%.o : ./example/%.cpp
	$(CXX) -c -g $< -o  $@  $(CXX_FLAGS) $(INC)
$(OBJS_PATH)/%.o : ./src/net/%.cpp
	$(CXX) -c -g $< -o  $@  $(CXX_FLAGS) $(INC)
$(OBJS_PATH)/%.o : ./src/xop/%.cpp
	$(CXX) -c -g $< -o  $@  $(CXX_FLAGS) $(INC)
clean:
	-rm -rf $(OBJS_PATH) $(TARGET1) $(TARGET2) $(TARGET3)
# $@	目标集合
# $%	当目标是函数库文件时, 表示其中的目标文件名
# $<	第一个依赖目标. 如果依赖目标是多个, 逐个表示依赖目标
# $?	比目标新的依赖目标的集合
# $^	所有依赖目标的集合, 会去除重复的依赖目标
# $+	所有依赖目标的集合, 不会去除重复的依赖目标
# $*	这个是GNU make特有的, 其它的make不一定支持
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

屁小猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值