
#编译器
CXX = g++

#是否为debug版本， -o0 -o1 -o2 -o3编译器的优化选项的4个级别. 级别越大优化效果越好，但编译时间越长.  -g 在编译的时候，产生调试信息
ifeq ($(ver), debug)
OPTI  = -o0 -g
else
OPTI  = -o3
endif

#编译参数
#-Wall 选项意思是编译后显示所有警告
#-Wno-strict-aliasing 
#-Wno-unused-variable
CXXFLAGS = -Wall -Wno-strict-aliasing -Wno-unused-variable -fPIC
CFLAGS = -Wall -Wno-strict-aliasing -Wno-unused-variable -fPIC -fpermissive

#编译参数
#-shared 生成动态库
#-D_REENTRANT
#-fPIC 
LDFLAGS = -shared -Wl,-Bsymbolic

#遍历src源码目录下的所有目录，SUBDIRS保存了所有目录
SUBDIR = $(shell ls ../../src -R | grep /)
SUBDIRS = $(subst :,/,$(SUBDIR))

#$(warning $(SUBDIR))

#$(warning $(SUBDIRS))


#头文件搜索目录， 把src下的所有目录都加入到头文件搜索目录中

INCPATH =$(subst ../../,-I../../,$(SUBDIRS)) -I../../include/ -I../../include/hpr/

#打印变量
$(warning $(INCPATH))
#exit

#告诉编译器cpp文件搜索路径
VPATH = $(subst : ,:,$(SUBDIR))./
VPATHS = $(subst : ,:,$(SUBDIR))./

#遍历src下的所有cpp文件
SOURCE = $(foreach dir,$(SUBDIRS),$(wildcard $(dir)*.cpp))
SOURCE_C = $(foreach dir,$(SUBDIRS),$(wildcard $(dir)*.c))

#打印变量
#$(warning $(SOURCE))
#exit

#将cpp的路径名称的.cpp后缀换为.o
OBJ = $(patsubst %.cpp,%.o,$(SOURCE))
OBJ_C = $(patsubst %.c,%.o,$(SOURCE_C))

#打印变量
#$(warning $(OBJS))

#取出.o的文件名，不带路径
OBJFILE  = $(foreach dir,$(OBJ),$(notdir $(dir)))
OBJFILE_C  = $(foreach dir,$(OBJ_C),$(notdir $(dir)))
OBJFILE_ALL := $(OBJFILE) $(OBJFILE_C)

#打印变量
#$(warning $(OBJFILE_ALL))
#exit

#.o输出到.OBJ目录下
OBJSPATH = $(addprefix .OBJ/,$(OBJFILE_ALL)) 

#依赖库路劲
LIBPATH = ../../lib/linux32

#成果物路径
TARPATH = ../../lib/linux32

#依赖库
LINKAL = $(wildcard $(LIBPATH)*.a) $(wildcard $(LIBPATH)*.al)
LINKAL += -lpthread -lhpr -lusb-1.0
#库名称
TARGET = libuvc.so 

.PHONY:all

all : $(OBJFILE_ALL) $(TARGET)
$(OBJFILE): %.o: %.cpp
	$(CXX) $(OPTI) $(CXXFLAGS) -c -o $@ $<  $(INCPATH)
$(OBJFILE_C): %.o: %.c
	$(CXX) $(OPTI) $(CFLAGS) -c -o $@ $<  $(INCPATH)
	
$(TARGET): $(OBJFILE_ALL)
	$(CXX) -L$(TARPATH) $(OPTI) $(LDFLAGS) $(OBJFILE_ALL) -Wl,-rpath='$$ORIGIN' $(LINKAL) -o $(TARGET)
	mv $(TARGET) $(TARPATH) -f	


.PHONY:clean
clean:
	rm -rf $(OBJFILE_ALL)
	rm -rf $(TARPATH)/$(TARGET)
	
#.PHONY:cp
#cp:
#	cp $(TARPATH)/$(TARGET) ../../demo/Thermal/linux/Lib64/


