makefile实例解析

项目Makefile解析

笔记原由

之前对Makefile文件就有基本的了解,但仅限于编译、链接等基本的知识,很多语法不甚了解。所以在本次华为VCM接口对接项目中吃了大亏。原本直接可以用华为的提供的Makefile demo直接进行编译的,但是由于不熟悉该语法,不懂的其中的道道,导致在使用cmake进行编译的时候,出现很多第三方库的版本冲突问题:找不到头文件、链接不到库、库版本问题等等。因此这里有必要对现有的项目和对应的Makefile文件的进行一个详细的解析。

项目文件结构

本项目是在Linux系统下的,项目的文件结构如下:
在这里插入图片描述
Makefile的主要功能分成两个部分:对华为提供的demo进行编译,以及接口编译生成so库。

# 变量定义
VA_PLUGIN_IMAGE_MODE_SAMPLE             = va_plugin_image_mode_sample
VA_PLUGIN_VIDEO_MODE_SAMPLE             = va_plugin_video_mode_sample
VA_PLUGIN_INVALID_IMAGE_TEST            = va_plugin_invalid_image_test
VA_PLUGIN_CHANNEL_CREATE_CLOSE          = va_plugin_channel_creat_close_sample
VA_PLUGIN_IMAGE_MODE_ANALYZE_RESTART    = va_plugin_image_mode_analyze_restart
VA_PLUGIN_VIDEO_MODE_ANALYZE_RESTART    = va_plugin_video_mode_analyze_restart
VA_PLUGIN_INITIALIZATION_TEST           = va_plugin_initialization_test
VA_IMAGE_DETECTOR                       = va_image_detector
IR_FAKE_PLUGIN                          = fake_plugin_ir
VA_FAKE_PLUGIN                          = fake_plugin_va
VA_PLUGIN_VIDEO_RAW_STREAM_MODE_SAMPLE  = va_plugin_raw_stream_mode_sample

IR_PLUGIN_INITIALIZATION_TEST           = ir_plugin_initialization_test
VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_1V1      = va_plugin_image_extract_for_ir_1v1
IR_PLUGIN_COMPARE_1V1_TEST              = ir_plugin_Compare_1v1_test
VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_REPO     = va_plugin_image_extract_for_ir_repo
IR_PLUGIN_MATCH_1VM_TEST                = ir_plugin_Match_1vM_test
IR_PLUGIN_MATCH_NVM_TEST                = ir_plugin_Match_NvM_test
# 编译器
CC = g++
# 不同的标记位:1,2,3
# 1:可执行文件(.o)的标记位:-O0:不进行优化处理;-Wl:警告弃用;-fPIC则表明使用地址无关代码;-fstack-protector-all:启用堆栈保护,为所有函数插入保护代码。
CFLAGS_FOR_EXE :=-O0 -std=c++11 -fstack-protector-all -fPIC
# 2:可执行文件(.o)的依赖标记位:
# -Wl,-Bstatic指示跟在后面的-lxxx选项链接的都是静态库(-s),-Wl,-Bdynamic指示跟在后面的-lxxx选项链接的都是动态库(-z)。
LDFLAGS_FOR_EXE := -Wl,-z,relro,-z,now,-z,noexecstack -pie 
# 3:动态库(.so)的标记位;-shared表明产生共享库
LDFLAGS_FOR_SO  := -Wl,-z,relro,-z,now,-z,noexecstack -shared

# “=”为赋值,“:=”变量给变量赋值,“+=”为追加
BASE_DIR = ./
VA_SRC_DIRS := $(BASE_DIR)/src/va/
IR_SRC_DIRS := $(BASE_DIR)/src/ir/
COMMON_SRC_DIRS := $(BASE_DIR)/src/common/

INC_DIR := ./inc
INC_DIR += ./inc/ivs_log
INC_DIR += $(BASE_DIR)/open_src/protobuf/source/inc
INC_DIR += $(BASE_DIR)/open_src/opencv/source/inc
INC_DIR += $(BASE_DIR)/open_src/boost/source/inc
INC_DIR += /usr/local/cuda-8.0/include

# Makefile函数addprefix:添加前缀----逐个给头文件路径添加“-I”
INC_PATH_FLAG := $(addprefix -I, $(INC_DIR))

# 遍历foreach目录dir($(VA_SRC_DIRS))下的文件,将文件赋值给变量
SRCS_VA_PLUGIN_IMAGE_MODE_SAMPLE := $(foreach dir, $(VA_SRC_DIRS), $(wildcard $(dir)/va_plugin_image_mode_sample.cpp))
SRCS_VA_PLUGIN_IMAGE_MODE_SAMPLE += $(foreach dir, $(COMMON_SRC_DIRS), $(wildcard $(dir)/common_tool.cpp))
SRCS_VA_PLUGIN_IMAGE_MODE_SAMPLE += $(foreach dir, $(BASE_DIR), $(wildcard $(dir)/open_src/protobuf/source/src/message.pb.cpp))
SRCS_VA_PLUGIN_CHANNEL_CREATE_CLOSE := $(foreach dir, $(VA_SRC_DIRS), $(wildcard $(dir)/va_plugin_channel_creat_close_sample.cpp))
SRCS_VA_PLUGIN_CHANNEL_CREATE_CLOSE += $(foreach dir, $(COMMON_SRC_DIRS), $(wildcard $(dir)/common_tool.cpp))
SRCS_VA_PLUGIN_CHANNEL_CREATE_CLOSE += $(foreach dir, $(BASE_DIR), $(wildcard $(dir)/open_src/protobuf/source/src/message.pb.cpp))
SRCS_VA_PLUGIN_IMAGE_MODE_ANALYZE_RESTART := $(foreach dir, $(VA_SRC_DIRS), $(wildcard $(dir)/va_plugin_image_mode_analyze_restart.cpp))
SRCS_VA_PLUGIN_IMAGE_MODE_ANALYZE_RESTART += $(foreach dir, $(COMMON_SRC_DIRS), $(wildcard $(dir)/common_tool.cpp))
SRCS_VA_PLUGIN_IMAGE_MODE_ANALYZE_RESTART += $(foreach dir, $(BASE_DIR), $(wildcard $(dir)/open_src/protobuf/source/src/message.pb.cpp))
SRCS_VA_PLUGIN_VIDEO_MODE_ANALYZE_RESTART := $(foreach dir, $(VA_SRC_DIRS), $(wildcard $(dir)/va_plugin_video_mode_analyze_restart.cpp))
SRCS_VA_PLUGIN_VIDEO_MODE_ANALYZE_RESTART += $(foreach dir, $(COMMON_SRC_DIRS), $(wildcard $(dir)/common_tool.cpp))
SRCS_VA_PLUGIN_VIDEO_MODE_ANALYZE_RESTART += $(foreach dir, $(BASE_DIR), $(wildcard $(dir)/open_src/protobuf/source/src/message.pb.cpp))
SRCS_VA_PLUGIN_INVALID_IMAGE_TEST := $(foreach dir, $(VA_SRC_DIRS), $(wildcard $(dir)/va_plugin_invalid_image_test.cpp))
SRCS_VA_PLUGIN_INVALID_IMAGE_TEST += $(foreach dir, $(COMMON_SRC_DIRS), $(wildcard $(dir)/common_tool.cpp))
SRCS_VA_PLUGIN_INVALID_IMAGE_TEST += $(foreach dir, $(BASE_DIR), $(wildcard $(dir)/open_src/protobuf/source/src/message.pb.cpp))
SRC_VA_PLUGIN_INITIALIZATION_TEST := $(foreach dir, $(VA_SRC_DIRS), $(wildcard $(dir)/va_plugin_initialization_test.cpp))
SRCS_VA_PLUGIN_VIDEO_RAW_STREAM_MODE_SAMPLE := $(foreach dir, $(VA_SRC_DIRS), $(wildcard $(dir)/va_plugin_raw_stream_mode_sample.cpp))
SRCS_VA_PLUGIN_VIDEO_RAW_STREAM_MODE_SAMPLE += $(foreach dir, $(COMMON_SRC_DIRS), $(wildcard $(dir)/common_tool.cpp))
SRCS_VA_PLUGIN_VIDEO_RAW_STREAM_MODE_SAMPLE += $(foreach dir, $(BASE_DIR), $(wildcard $(dir)/open_src/protobuf/source/src/message.pb.cpp))
SRCS_VA_IMAGE_DETECTOR := $(foreach dir, $(VA_SRC_DIRS), $(wildcard $(dir)/va_image_detector.cpp))
SRCS_VA_IMAGE_DETECTOR += $(foreach dir, $(COMMON_SRC_DIRS), $(wildcard $(dir)/common_tool.cpp))
SRCS_VA_IMAGE_DETECTOR += $(foreach dir, $(BASE_DIR), $(wildcard $(dir)/open_src/protobuf/source/src/message.pb.cpp))
SRCS_VA_PLUGIN_VIDEO_MODE_SAMPLE := $(foreach dir, $(VA_SRC_DIRS), $(wildcard $(dir)/va_plugin_video_mode_sample.cpp))
SRCS_VA_PLUGIN_VIDEO_MODE_SAMPLE += $(foreach dir, $(COMMON_SRC_DIRS), $(wildcard $(dir)/common_tool.cpp))
SRCS_VA_PLUGIN_VIDEO_MODE_SAMPLE += $(foreach dir, $(BASE_DIR), $(wildcard $(dir)/open_src/protobuf/source/src/message.pb.cpp))

SRCS_IR_PLUGIN_INITIALIZATION_TEST       := $(foreach dir, $(IR_SRC_DIRS), $(wildcard $(dir)/ir_plugin_initialization_test.cpp))
SRCS_VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_1V1  := $(foreach dir, $(VA_SRC_DIRS), $(wildcard $(dir)/va_plugin_image_extract_for_ir_1v1.cpp))
SRCS_VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_1V1  += $(foreach dir, $(COMMON_SRC_DIRS), $(wildcard $(dir)/common_tool.cpp))
SRCS_VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_1V1  += $(foreach dir, $(BASE_DIR), $(wildcard $(dir)/open_src/protobuf/source/src/message.pb.cpp))
SRCS_IR_PLUGIN_COMPARE_1V1_TEST          := $(foreach dir, $(IR_SRC_DIRS), $(wildcard $(dir)/ir_plugin_Compare_1v1_test.cpp))
SRCS_IR_PLUGIN_COMPARE_1V1_TEST          += $(foreach dir, $(COMMON_SRC_DIRS), $(wildcard $(dir)/common_tool.cpp))
SRCS_IR_PLUGIN_COMPARE_1V1_TEST          += $(foreach dir, $(BASE_DIR), $(wildcard $(dir)/open_src/protobuf/source/src/message.pb.cpp))
SRCS_VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_REPO := $(foreach dir, $(VA_SRC_DIRS), $(wildcard $(dir)/va_plugin_image_extract_for_ir_repo.cpp))
SRCS_VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_REPO += $(foreach dir, $(COMMON_SRC_DIRS), $(wildcard $(dir)/common_tool.cpp))
SRCS_VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_REPO += $(foreach dir, $(BASE_DIR), $(wildcard $(dir)/open_src/protobuf/source/src/message.pb.cpp))
SRCS_IR_PLUGIN_MATCH_1VM_TEST            := $(foreach dir, $(IR_SRC_DIRS), $(wildcard $(dir)/ir_plugin_Match_1vM_test.cpp))
SRCS_IR_PLUGIN_MATCH_1VM_TEST            += $(foreach dir, $(COMMON_SRC_DIRS), $(wildcard $(dir)/common_tool.cpp))
SRCS_IR_PLUGIN_MATCH_1VM_TEST            += $(foreach dir, $(BASE_DIR), $(wildcard $(dir)/open_src/protobuf/source/src/message.pb.cpp))
SRCS_IR_PLUGIN_MATCH_NVM_TEST            := $(foreach dir, $(IR_SRC_DIRS), $(wildcard $(dir)/ir_plugin_Match_NvM_test.cpp))
SRCS_IR_PLUGIN_MATCH_NVM_TEST            += $(foreach dir, $(COMMON_SRC_DIRS), $(wildcard $(dir)/common_tool.cpp))
SRCS_IR_PLUGIN_MATCH_NVM_TEST            += $(foreach dir, $(BASE_DIR), $(wildcard $(dir)/open_src/protobuf/source/src/message.pb.cpp))

#Makefile函数:patsubst(模式替换)--*.cpp字符串替换为*.o,并赋值给左边变量
OBJS_VA_PLUGIN_IMAGE_MODE_SAMPLE            := $(patsubst %.cpp, %.o, $(SRCS_VA_PLUGIN_IMAGE_MODE_SAMPLE))
OBJS_VA_PLUGIN_CHANNEL_CREATE_CLOSE         := $(patsubst %.cpp, %.o, $(SRCS_VA_PLUGIN_CHANNEL_CREATE_CLOSE))
OBJS_VA_PLUGIN_IMAGE_MODE_ANALYZE_RESTART   := $(patsubst %.cpp, %.o, $(SRCS_VA_PLUGIN_IMAGE_MODE_ANALYZE_RESTART))
OBJS_VA_PLUGIN_VIDEO_MODE_ANALYZE_RESTART   := $(patsubst %.cpp, %.o, $(SRCS_VA_PLUGIN_VIDEO_MODE_ANALYZE_RESTART))
OBJS_VA_PLUGIN_INVALID_IMAGE_TEST           := $(patsubst %.cpp, %.o, $(SRCS_VA_PLUGIN_INVALID_IMAGE_TEST))
OBJS_VA_PLUGIN_INITIALIZATION_TEST          := $(patsubst %.cpp, %.o, $(SRC_VA_PLUGIN_INITIALIZATION_TEST))
OBJS_VA_PLUGIN_VIDEO_MODE_SAMPLE            := $(patsubst %.cpp, %.o, $(SRCS_VA_PLUGIN_VIDEO_MODE_SAMPLE))
OBJS_VA_IMAGE_DETECTOR                      := $(patsubst %.cpp, %.o, $(SRCS_VA_IMAGE_DETECTOR))
OBJS_VA_PLUGIN_VIDEO_RAW_STREAM_MODE_SAMPLE := $(patsubst %.cpp, %.o, $(SRCS_VA_PLUGIN_VIDEO_RAW_STREAM_MODE_SAMPLE))

OBJS_IR_PLUGIN_INITIALIZATION_TEST          := $(patsubst %.cpp, %.o, $(SRCS_IR_PLUGIN_INITIALIZATION_TEST))
OBJS_IR_PLUGIN_COMPARE_1V1_TEST             := $(patsubst %.cpp, %.o, $(SRCS_IR_PLUGIN_COMPARE_1V1_TEST))
OBJS_VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_1V1     := $(patsubst %.cpp, %.o, $(SRCS_VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_1V1))
OBJS_VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_REPO    := $(patsubst %.cpp, %.o, $(SRCS_VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_REPO))
OBJS_IR_PLUGIN_MATCH_1VM_TEST               := $(patsubst %.cpp, %.o, $(SRCS_IR_PLUGIN_MATCH_1VM_TEST))
OBJS_IR_PLUGIN_MATCH_NVM_TEST               := $(patsubst %.cpp, %.o, $(SRCS_IR_PLUGIN_MATCH_NVM_TEST))

# 依赖库,给左边变量赋值和追加
ALL_VA_PLUGIN_LIBS := boost_filesystem
ALL_VA_PLUGIN_LIBS += boost_system
ALL_VA_PLUGIN_LIBS += opencv_core
ALL_VA_PLUGIN_LIBS += opencv_imgcodecs
ALL_VA_PLUGIN_LIBS += opencv_imgproc
ALL_VA_PLUGIN_LIBS += opencv_videoio
ALL_VA_PLUGIN_LIBS += nvidia-ml
ALL_VA_PLUGIN_LIBS += cuda
ALL_VA_PLUGIN_LIBS += cudart
ALL_VA_PLUGIN_LIBS += securec
ALL_VA_PLUGIN_LIBS += dl
ALL_VA_PLUGIN_LIBS += ivs_log
ALL_VA_PLUGIN_LIBS += videotool
# Makefile函数addprefix:添加前缀----逐个给依赖的动态库添加“-l”
ALL_VA_PLUGIN_LIBS_FLAGS := $(addprefix -l, $(ALL_VA_PLUGIN_LIBS))

ALL_IR_PLUGIN_LIBS := ivs_log
ALL_IR_PLUGIN_LIBS += dl
ALL_IR_PLUGIN_LIBS += boost_filesystem
ALL_IR_PLUGIN_LIBS += boost_system
ALL_IR_PLUGIN_LIBS += opencv_core
ALL_IR_PLUGIN_LIBS += opencv_imgcodecs
ALL_IR_PLUGIN_LIBS += opencv_imgproc
ALL_IR_PLUGIN_LIBS += opencv_videoio
ALL_IR_PLUGIN_LIBS += securec
# Makefile函数addprefix:添加前缀----逐个给依赖的动态库添加“-l”
ALL_IR_PLUGIN_LIBS_FLAGS := $(addprefix -l, $(ALL_IR_PLUGIN_LIBS))

# 静态库依赖项:# -Wl,-Bstatic指示跟在后面的-lxxx选项链接的都是静态库(-s),-Wl,-Bdynamic指示跟在后面的-lxxx选项链接的都是动态库(-z)。
STATIC_LIB_PROTOBUF := -Wl,-Bstatic -lprotobuf -Wl,-Bdynamic

LIB_DIR := $(BASE_DIR)/open_src/protobuf/dev/lib/
LIB_DIR += $(BASE_DIR)/open_src/opencv/dev/lib/
LIB_DIR += $(BASE_DIR)/open_src/boost/dev/lib/
LIB_DIR += $(BASE_DIR)/open_src/other/
LIB_DIR += $(BASE_DIR)/open_src//ve_lib/
LIB_DIR += /usr/local/cuda-8.0/lib64/
LIB_DIR += /usr/local/cuda-8.0/lib64/stubs/
# Makefile函数addprefix:添加前缀----逐个给依赖的动态库路径添加“-L”=======注意这个依赖库的表示:路径就是“-L”,库名字就是“-l”
LIB_PATH_FLAG := $(addprefix -L, $(LIB_DIR))

# 动态库路径导出,可执行文件或者so依赖三方库的路径导出,仅在该次运行有效。。
export LD_LIBRARY_PATH=./open_src/ve_lib/:./open_src/other/

# Makefile命令,执行之前寻找到的.cpp变量,编译为目标文件.o    %.cpp通配符会导入所有的cpp,%.o会表示为所有cpp对应的o文件名
# $< 输入依赖项集,$@ 目标集, -g表示添加gdb调试选项,-c 调试,只编译不链接,只生成目标文件
%.o: %.cpp
	$(CC) $(CFLAGS_FOR_EXE) -g -c $(INC_PATH_FLAG) -o $@  $<

all: $(VA_PLUGIN_IMAGE_MODE_SAMPLE) $(VA_PLUGIN_CHANNEL_CREATE_CLOSE) $(VA_PLUGIN_IMAGE_MODE_ANALYZE_RESTART) $(VA_PLUGIN_VIDEO_MODE_ANALYZE_RESTART) $(VA_PLUGIN_VIDEO_MODE_SAMPLE) $(VA_PLUGIN_INVALID_IMAGE_TEST) $(VA_PLUGIN_INITIALIZATION_TEST) $(VA_FAKE_PLUGIN) $(IR_FAKE_PLUGIN) $(VA_IMAGE_DETECTOR) $(VA_PLUGIN_VIDEO_RAW_STREAM_MODE_SAMPLE) $(VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_1V1) $(IR_PLUGIN_COMPARE_1V1_TEST) $(VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_REPO) $(IR_PLUGIN_MATCH_1VM_TEST) $(IR_PLUGIN_MATCH_NVM_TEST) $(IR_PLUGIN_INITIALIZATION_TEST)

# 生成可执行文件:-z defs:对所有无法解析的引用作出警告
# VA plugin samples
$(VA_PLUGIN_IMAGE_MODE_SAMPLE):$(OBJS_VA_PLUGIN_IMAGE_MODE_SAMPLE)
	$(CC) $(CFLAGS_FOR_EXE) -g -o $@ $^ $(INC_PATH_FLAG) $(LDFLAGS_FOR_EXE) $(LIB_PATH_FLAG) $(ALL_VA_PLUGIN_LIBS_FLAGS) $(STATIC_LIB_PROTOBUF) -z defs

$(VA_PLUGIN_CHANNEL_CREATE_CLOSE):$(OBJS_VA_PLUGIN_CHANNEL_CREATE_CLOSE)
	$(CC) $(CFLAGS_FOR_EXE) -g -o $@ $^ $(INC_PATH_FLAG) $(LDFLAGS_FOR_EXE) $(LIB_PATH_FLAG) $(ALL_VA_PLUGIN_LIBS_FLAGS) $(STATIC_LIB_PROTOBUF) -z defs
	
$(VA_PLUGIN_IMAGE_MODE_ANALYZE_RESTART):$(OBJS_VA_PLUGIN_IMAGE_MODE_ANALYZE_RESTART)
	$(CC) $(CFLAGS_FOR_EXE) -g -o $@ $^ $(INC_PATH_FLAG) $(LDFLAGS_FOR_EXE) $(LIB_PATH_FLAG) $(ALL_VA_PLUGIN_LIBS_FLAGS) $(STATIC_LIB_PROTOBUF) -z defs
	
$(VA_PLUGIN_VIDEO_MODE_ANALYZE_RESTART):$(OBJS_VA_PLUGIN_VIDEO_MODE_ANALYZE_RESTART)
	$(CC) $(CFLAGS_FOR_EXE) -g -o $@ $^ $(INC_PATH_FLAG) $(LDFLAGS_FOR_EXE) $(LIB_PATH_FLAG) $(ALL_VA_PLUGIN_LIBS_FLAGS) $(STATIC_LIB_PROTOBUF) -z defs
    
$(VA_PLUGIN_INVALID_IMAGE_TEST):$(OBJS_VA_PLUGIN_INVALID_IMAGE_TEST)
	$(CC) $(CFLAGS_FOR_EXE) -g -o $@ $^ $(INC_PATH_FLAG) $(LDFLAGS_FOR_EXE) $(LIB_PATH_FLAG) $(ALL_VA_PLUGIN_LIBS_FLAGS) $(STATIC_LIB_PROTOBUF) -z defs

$(VA_PLUGIN_INITIALIZATION_TEST):$(OBJS_VA_PLUGIN_INITIALIZATION_TEST)
	$(CC) $(CFLAGS_FOR_EXE) -g -o $@ $^ $(INC_PATH_FLAG) $(LDFLAGS_FOR_EXE) $(LIB_PATH_FLAG) $(ALL_VA_PLUGIN_LIBS_FLAGS) $(STATIC_LIB_PROTOBUF) -z defs

$(VA_PLUGIN_VIDEO_MODE_SAMPLE):$(OBJS_VA_PLUGIN_VIDEO_MODE_SAMPLE)
	$(CC) $(CFLAGS_FOR_EXE) -g -o $@ $^ $(INC_PATH_FLAG) $(LDFLAGS_FOR_EXE) $(LIB_PATH_FLAG) $(ALL_VA_PLUGIN_LIBS_FLAGS) $(STATIC_LIB_PROTOBUF) -z defs

$(VA_IMAGE_DETECTOR):$(OBJS_VA_IMAGE_DETECTOR)
	$(CC) $(CFLAGS_FOR_EXE) -g -o $@ $^ $(INC_PATH_FLAG) $(LDFLAGS_FOR_EXE) $(LIB_PATH_FLAG) $(ALL_VA_PLUGIN_LIBS_FLAGS) $(STATIC_LIB_PROTOBUF) -z defs


# IR plugin samples
$(IR_PLUGIN_INITIALIZATION_TEST):$(OBJS_IR_PLUGIN_INITIALIZATION_TEST)
	$(CC) $(CFLAGS_FOR_EXE) -g -o $@ $^ $(INC_PATH_FLAG) $(LDFLAGS_FOR_EXE) $(LIB_PATH_FLAG) $(ALL_IR_PLUGIN_LIBS_FLAGS) -z defs

$(VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_1V1):$(OBJS_VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_1V1)
	$(CC) $(CFLAGS_FOR_EXE) -g -o $@ $^ $(INC_PATH_FLAG) $(LDFLAGS_FOR_EXE) $(LIB_PATH_FLAG) $(ALL_VA_PLUGIN_LIBS_FLAGS) $(STATIC_LIB_PROTOBUF) -z defs
	
$(IR_PLUGIN_COMPARE_1V1_TEST):$(OBJS_IR_PLUGIN_COMPARE_1V1_TEST)
	$(CC) $(CFLAGS_FOR_EXE) -g -o $@ $^ $(INC_PATH_FLAG) $(LDFLAGS_FOR_EXE) $(LIB_PATH_FLAG) $(ALL_IR_PLUGIN_LIBS_FLAGS) $(STATIC_LIB_PROTOBUF) -z defs

$(VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_REPO):$(OBJS_VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_REPO)
	$(CC) $(CFLAGS_FOR_EXE) -g -o $@ $^ $(INC_PATH_FLAG) $(LDFLAGS_FOR_EXE) $(LIB_PATH_FLAG) $(ALL_VA_PLUGIN_LIBS_FLAGS) $(STATIC_LIB_PROTOBUF) -z defs

$(IR_PLUGIN_MATCH_1VM_TEST):$(OBJS_IR_PLUGIN_MATCH_1VM_TEST)
	$(CC) $(CFLAGS_FOR_EXE) -g -o $@ $^ $(INC_PATH_FLAG) $(LDFLAGS_FOR_EXE) $(LIB_PATH_FLAG) $(ALL_IR_PLUGIN_LIBS_FLAGS) $(STATIC_LIB_PROTOBUF) -z defs

$(IR_PLUGIN_MATCH_NVM_TEST):$(OBJS_IR_PLUGIN_MATCH_NVM_TEST)
	$(CC) $(CFLAGS_FOR_EXE) -g -o $@ $^ $(INC_PATH_FLAG) $(LDFLAGS_FOR_EXE) $(LIB_PATH_FLAG) $(ALL_IR_PLUGIN_LIBS_FLAGS) $(STATIC_LIB_PROTOBUF) -z defs

$(VA_PLUGIN_VIDEO_RAW_STREAM_MODE_SAMPLE):$(OBJS_VA_PLUGIN_VIDEO_RAW_STREAM_MODE_SAMPLE)
	$(CC) $(CFLAGS_FOR_EXE) -g -o $@ $^ $(INC_PATH_FLAG) $(LDFLAGS_FOR_EXE) $(LIB_PATH_FLAG) $(ALL_VA_PLUGIN_LIBS_FLAGS) $(STATIC_LIB_PROTOBUF) -z defs

# fake plugins
fake_plugin_va.o: ./src/fake_plugin/fake_plugin_va.cpp
	$(CC) -O3 -std=c++11 -fstack-protector-all -fPIC -g -c $(INC_PATH_FLAG) -o $@  $<
./open_src/protobuf/source/src/message.pb.o: ./open_src/protobuf/source/src/message.pb.cpp
	$(CC) -O3 -std=c++11 -fstack-protector-all -fPIC -g -c $(INC_PATH_FLAG) -o $@  $<
$(VA_FAKE_PLUGIN): ./src/fake_plugin/fake_plugin_va.o ./open_src/protobuf/source/src/message.pb.o
	$(CC) $(LDFLAGS_FOR_SO) -o lib$@.so $^ $(LIB_PATH_FLAG) -lpthread -Wl,-Bstatic -lprotobuf -Wl,-Bdynamic -z defs

fake_plugin_ir.o: ./src/fake_plugin/fake_plugin_ir.cpp
	$(CC) -O3 -std=c++11 -fstack-protector-all -fPIC -g -c $(INC_PATH_FLAG) -o $@  $<
$(IR_FAKE_PLUGIN): ./src/fake_plugin/fake_plugin_ir.o
	$(CC) $(LDFLAGS_FOR_SO) -o lib$@.so $^ $(LIB_PATH_FLAG) -z defs

clean:
	rm -rf ./*.o ./src/va/*.o ./open_src/protobuf/source/src/*.o ./src/ir/*.o ./src/common/*.o ./src/fake_plugin/*.o ./*.so ./open_src/protobuf/source/src/*.o ./$(VA_PLUGIN_IMAGE_MODE_SAMPLE) ./$(VA_PLUGIN_CHANNEL_CREATE_CLOSE) ./$(VA_PLUGIN_IMAGE_MODE_ANALYZE_RESTART) ./$(VA_PLUGIN_VIDEO_MODE_ANALYZE_RESTART) ./$(VA_PLUGIN_INVALID_IMAGE_TEST) ./$(VA_PLUGIN_INITIALIZATION_TEST) ./$(VA_PLUGIN_VIDEO_RAW_STREAM_MODE_SAMPLE) ./$(VA_IMAGE_DETECTOR) ./$(VA_PLUGIN_VIDEO_MODE_SAMPLE) ./$(IR_PLUGIN_INITIALIZATION_TEST) $(VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_1V1) ./$(IR_PLUGIN_COMPARE_1V1_TEST) ./$(VA_PLUGIN_IMAGE_EXTRACT_FOR_IR_REPO) ./$(IR_PLUGIN_MATCH_1VM_TEST) ./$(IR_PLUGIN_MATCH_NVM_TEST)

实例的解析中,很多都是不熟悉的语法可以参考印象笔记中的Makefile相关的文档,里面详细介绍了一些常用的语法结构和编译选项。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值