笔记原由
之前对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相关的文档,里面详细介绍了一些常用的语法结构和编译选项。