Makefile 标准写法

12 篇文章 0 订阅

opencv.pc // 这个配置被Makefile 调用

# Package Information for pkg-config

prefix=/usr/local/thirdparty
exec_prefix=${prefix}
libdir=${exec_prefix}/lib64
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 3.4.0
Libs: -L${exec_prefix}/lib64 -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir_old} -I${includedir_new}

Makefile

thirdparty_root := /usr/local/thirdparty
facesdk_root := /usr/local/facesdk
export PKG_CONFIG_PATH := ${thirdparty_root}/lib64/pkgconfig:${PKG_CONFIG_PATH}

CC := g++
INCS += `pkg-config --cflags opencv`
INCS += -I${facesdk_root}/include
INCS += -I${thirdparty_root}/include
INCS += -I${thirdparty_root}/include/apr-1


LIBS += `pkg-config --libs opencv`
LIBS +=	-L${thirdparty_root}/lib -lglog -lactivemq-cpp -lapr-1
LIBS +=	-L${facesdk_root}/lib -lrr_faceverify_t -lrr_facedetect_t

AFLAGS := -Wall -c -fPIC -O2 -std=c++11 $(INCS)
LDFLAGS := -lpthread -lcurl
LDFLAGS += -Wl,-rpath,${thirdparty_root}/lib64:${thirdparty_root}/lib:${facesdk_root}/lib

OBJS := $(patsubst %.cpp,%.o,$(shell find . -name "*.cpp"))


FaceFilter: $(OBJS)
	$(CC) -o $@ $^ $(LDFLAGS) $(LIBS)

$(OBJS): %.o:%.cpp
	$(CC) $(AFLAGS) $^ -o $@

debugOBJS:
	@echo ${OBJS}

.PHONY: clean FaceFilter setenv

clean:					
	rm -rf *.o FaceFilter baseutils/*.o factory/*.o message/*.o servicemodules/*.o

参考新的写法///

######### 标准Makefile Lv1.2 / 使用动态库 ########
EXE=helloworld
SUBDIR=src object

#CXXFLAGS:编译选项, LDFLAGS:链接选项
CXXFLAGS += -I/home/mytest/example/include/
LDFLAGS += -L/home/mytest/example/lib -lexample

CXX_SOURCES =$(foreach dir,$(SUBDIR), $(wildcard $(dir)/*.cpp))
CXX_OBJECTS=$(patsubst  %.cpp, %.o, $(CXX_SOURCES))
DEP_FILES  =$(patsubst  %.o,  %.d, $(CXX_OBJECTS))

$(EXE): $(CXX_OBJECTS)
	g++  $(CXX_OBJECTS) -o $(EXE) $(LDFLAGS)
	
%.o: %.cpp
	g++  -c  $(CXXFLAGS) -MMD $<  -o  $@

-include $(DEP_FILES)

clean: 
	rm  -rf  $(CXX_OBJECTS)  $(DEP_FILES)  $(EXE)

test:
	echo $(CXX_OBJECTS)

下面是一个生成so 的一个makefile 的例子,非常通用,直接会找到当前文件下的所有cpp,以及文件夹下的所有cpp 文件
该例子用了opencv 库和人脸识别库,就是这么简单,拿走拿走别客气

EXE=libDetectCutImage.so

#SUBDIR=src object
#CXXFLAGS:编译选项, LDFLAGS:链接选项
CC := g++

INCS += `pkg-config --cflags opencv`
INCS += -I/usr/lib/jdk1.8.0_191/include
INCS += -I/usr/lib/jdk1.8.0_191/include/linux/

INCS += -I/usr/local/faceSDK_x86-64_ubuntu-16.04_cpu+cuda-gpu_3.1.2_180830/include

LIBS += `pkg-config --libs opencv`
LIBS += -L/usr/local/faceSDK_x86-64_ubuntu-16.04_cpu+cuda-gpu_3.1.2_180830/lib/cpu -lrr_facedetect_c


CXXFLAGS := -Wall -c -fPIC -O2 -std=c++11 $(INCS)
LDFLAGS := $(LIBS) -shared 


#CXXFLAGS += -I/usr/local/include/
#LDFLAGS += -L/usr/local/lib -lopencv_world

#CXX_SOURCES =$(foreach dir,$(SUBDIR), $(wildcard $(dir)/*.cpp))
#CXX_OBJECTS=$(patsubst  %.cpp, %.o, $(CXX_SOURCES))

CXX_OBJECTS := $(patsubst %.cpp,%.o,$(shell find . -name "*.cpp"))
DEP_FILES  =$(patsubst  %.o,  %.d, $(CXX_OBJECTS))

$(EXE): $(CXX_OBJECTS)
	g++  $(CXX_OBJECTS) -o $(EXE) $(LDFLAGS)
	
%.o: %.cpp
	g++  -c  $(CXXFLAGS) -MMD $<  -o  $@

-include $(DEP_FILES)

clean: 
	rm  -rf  $(CXX_OBJECTS)  $(DEP_FILES)  $(EXE)

test:
	echo $(CXX_OBJECTS)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值