参考:书写规则 — 跟我一起写Makefile 1.0 文档https://seisman.github.io/how-to-write-makefile/rules.html
整理学习
补充部分:
学习实战:
OBJS_PATH =
OBJS_PATH = $(shell pwd)/../build
TARGET = $(OBJS_PATH)/streamServer
TARGET_TEST_AUDIO_ENCODE = $(OBJS_PATH)/test_audio_encode_acc
TRGET_ALSA_RECORD_AUDIO = $(OBJS_PATH)/test_alsa_record_audio
TRGET_ONLINE_USB_AUDIO_DEVICE = $(OBJS_PATH)/test_onine_usb_audio_device
TRGET_ONLINE_IP_CAMERA_DEVICE = $(OBJS_PATH)/test_online_ip_camera_device
CROSS_COMPILE =
CXX = $(CROSS_COMPILE)g++
CC = $(CROSS_COMPILE)gcc
INC = -I$(shell pwd)/netwok \
-I$(shell pwd)/../include/ \
-I$(shell pwd)/../include/base/ \
-I$(shell pwd)/../include/base/ffmpeg \
-I$(shell pwd)/../include/base/hlog \
-I$(shell pwd)/../include/base/mxml \
-I$(shell pwd)/../include/base/md5 \
-I$(shell pwd)/../include/network \
-I$(shell pwd)/../include/rtsp \
-I$(shell pwd)/../include/base \
-I$(shell pwd)/../include/device \
-I$(shell pwd)/network
LIB = -L$(shell pwd)/../lib \
-L$(shell pwd)/../lib/ffmpeg \
-L$(shell pwd)/../lib/alsa
LD_FLAGS = -lpthread \
-lhpr -lhlog \
-lrt -ldl -lm -lz \
-lmxml \
-lavformat -lavcodec -lavdevice -lavutil -lswscale -lswresample -lavfilter -lpostproc \
-lasound \
-lfdk-aac \
-lx264
CXX_FLAGS = -std=c++11
O_FLAG = -O2
SRC1 = $(notdir $(wildcard ./network/*.cc))
OBJS1 = $(patsubst %.cc,$(OBJS_PATH)/%.o,$(SRC1))
SRC2 = $(notdir $(wildcard ./rtsp/*.cc))
OBJS2 = $(patsubst %.cc,$(OBJS_PATH)/%.o,$(SRC2))
SRC3 = $(notdir $(wildcard ./device/*.cc))
OBJS3 = $(patsubst %.cc,$(OBJS_PATH)/%.o,$(SRC3))
SRC4 = $(notdir $(wildcard main.cc master.cc ))
OBJS4 = $(patsubst %.cc,$(OBJS_PATH)/%.o,$(SRC4))
TEST_AUDIO_ENCODE =$(OBJS_PATH)/test_audio_encode_acc.o
TEST_ALSA_RECORD_AUDIO =$(OBJS_PATH)/test_alsa_record_audio.o
TEST_ONLINE_USB_AUDIO_DEVICE =$(OBJS_PATH)/test_onine_usb_audio_device.o
all: $(TARGET) $(TARGET_TEST_AUDIO_ENCODE) $(TRGET_ALSA_RECORD_AUDIO) $(TRGET_ONLINE_USB_AUDIO_DEVICE)
$(TARGET) : $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4)
LD_LIBRARY_PATH=$(shell pwd)/../lib $(CXX) $^ -o $@ $(CFLAGS) $(LD_FLAGS) $(CXX_FLAGS) $(LIB)
$(OBJS_PATH)/%.o : ./network/%.cc
$(CXX) -c $< -o $@ $(CXX_FLAGS) $(INC)
$(OBJS_PATH)/%.o : ./rtsp/%.cc
$(CXX) -c $< -o $@ $(CXX_FLAGS) $(INC)
$(OBJS_PATH)/%.o : ./device/%.cc
$(CXX) -c $< -o $@ $(CXX_FLAGS) $(INC)
$(OBJS_PATH)/%.o : %.cc
$(CXX) -c $< -o $@ $(CXX_FLAGS) $(INC)
$(TARGET_TEST_AUDIO_ENCODE) : $(TEST_AUDIO_ENCODE)
$(CXX) $^ -o $@ $(CFLAGS) $(CXX_FLAGS) $(LIB) -lavformat -lavcodec -lavdevice -lavutil -lswscale -lswresample -lavfilter -lpostproc -lfdk-aac -lx264
$(TEST_AUDIO_ENCODE):$(shell pwd)/../test/test_audio_encode_acc.cc
$(CXX) -c $< -o $@ $(CXX_FLAGS) $(INC)
$(TRGET_ALSA_RECORD_AUDIO) : $(shell pwd)/../test/test_alsa_record_audio.cc
$(CXX) $^ -o $@ $(CFLAGS) $(CXX_FLAGS) $(LIB) -lasound
$(TRGET_ONLINE_USB_AUDIO_DEVICE) : $(OBJS1) $(OBJS2) $(OBJS3) $(TEST_ONLINE_USB_AUDIO_DEVICE)
LD_LIBRARY_PATH=$(shell pwd)/../lib $(CXX) $^ -o $@ $(CFLAGS) $(LD_FLAGS) $(CXX_FLAGS) $(LIB)
$(TEST_ONLINE_USB_AUDIO_DEVICE):$(shell pwd)/../test/test_online_usb_audio_device.cc
$(CXX) -c $< -o $@ $(CXX_FLAGS) $(INC)
.PHONY : clean
clean:
-rm -rf $(OBJS_PATH)/*.o $(TARGET)