通用protoc Makefile
发布时间:2020-12-16 09:14:40 所属栏目:百科 来源:网络整理
导读:背景 Makefile 不仅可以用来编译链接gcc程序,还可以根据自己的需要用指定命令处理项目中的文件。 例如protoc,babel(js编译),meta数据的生成等。CMake可以完成这些内容,不过单纯的Makefile也可以适当编写达到比较好的效果。 下面是两个用protoc通过proto文
背景 CXX=g++ ifeq ($(ver),debug) CXXFLAGS=-std=c++11 -Wall -Wextra -g -O0 -DDEBUG else CXXFLAGS=-std=c++11 -Wall #-Wextra endif BIN=project # 除去隐藏目录 ALLDIR=$(shell find . -type d | grep -E ‘/.|proto|test‘ -v) SRCS=$(foreach DIR,$(ALLDIR),$(wildcard $(DIR)/*.cpp)) OBJS=$(patsubst %.cpp,%.o,$(SRCS)) PROTODIR=$(shell find . -type d | grep -E ‘/proto$$‘) PROTOFILE=$(wildcard $(PROTODIR)/*.proto) PROTOSRC=$(patsubst %.proto,%.pb.cc,$(PROTOFILE)) #$(patsubst %.proto,%.grpc.pb.cc,$(PROTOFILE)) PROTOHEAD=$(patsubst %.cc,%.h,$(PROTOSRC)) PROTOOBJS=$(patsubst %.cc,$(PROTOSRC)) ALL: $(PROTOOBJS) $(OBJS) # $(CXX) $(CXXFLAGS) -o $(BIN) $^ -pthread -lprotobuf #-lgrpc++ %.o: %cc %.cpp $(CXX) $(CXXFLAGS) -o [email?protected] -c $< $(PROTOSRC): $(PROTOFILE) #cd $(PROTODIR);protoc --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` $(notdir $(PROTOFILE)) cd $(PROTODIR);protoc --cpp_out=. $(notdir $(PROTOFILE)) 说明:patsubst是模式替换函数(返回替换后的列表),wildcard是通配符函数(返回列表),$()表达式里如果要嵌套一个其他变量var,也用 "$var "表示就可以了. make --trace选项可以打印编译过程。编译的过程是依赖如下: make all -> OBJS ->SRC -> PROTOFILE II. PROTO_CC := protoc INCLUDE := ../include PROTO_FLAGS := --cpp_out=$(INCLUDE) PROTO__SOURCES := $(wildcard *.proto) obj-y := $(PROTO__SOURCES:%.proto=$(INCLUDE)/%.pb.cc) obj-y += $(PROTO__SOURCES:%.proto=$(INCLUDE)/%.pb.h) OBJECT := #unused ############################## # change OBJECT to set execute file name ############################## all : $(obj-y) .PHONY: all $(INCLUDE)/%.pb.cc: %.proto $(PROTO_CC) $(PROTO_FLAGS) $^ @echo ‘generate file‘ $@ clean: rm -f $(obj-y) ?更简单的版本如上,只生成对应pb文件,通过INCLUDE制定编译结果的目录。 References https://yq.aliyun.com/articles/653475 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |