C&C++
发布时间:2022-04-03 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了通用protoc Makefile,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
背景
@H_484_10@makefile 不仅可以用来编译链接gcc程序,还可以根据自己的需要用指定命令处理项目中的文件。
例如protoc,babel(js编译),Meta数据的生成等。CMake可以完成这些内容,不过单纯的Makefile也可以适当编写达到比较好的效果。
下面是两个用protoc通过proto文件编译生成pb.cc和pb.h文件的代码。需要在linux下安装protoc。
I.
来自Reference 1,经过裁剪
@H_
874_20@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)/*.cp
p))
OBJS=$(patsubst %.cpp,%
.o,$(SRCS))
PROTODIR=$(
sHell find . -
type d | grep -E ‘/proto$$‘)
PROTOFILE=$(wildcard $(PROTODIR)/*.proto)
PROTOSRC=$(patsubst %.proto,%.pb.cc,$(PROTOFIL
E)) #$(patsubst %.proto,%.grpc.pb.cc,$(PROTOFIL
E))
PROTOHEAD=$(patsubst %.cc,%.h,$(PROTOSR
C))
PROTOOBJS=$(patsubst %.cc,$(PROTOSR
C))
ALL: $(PROTOOBJS) $(OBJS)
# $(CX
X) $(CXXFLAGS) -o $(BIN) $^ -pthread -lprotobuf #-lgrpc++
%.o: %cc %.
cpp
$(CX
X) $(CXXFLAGS) -o
[email protected] -c $<
$(PROTOSR
C): $(PROTOFIL
E)
#
cd $(PROTODIR
);protoc --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` $(notdir $(PROTOFIL
E))
cd $(PROTODIR
);protoc --cpp_out=. $(notdir $(PROTOFIL
E))
说明:patsubst是模式替换函数(返回替换后的列表),wildcard是通配符函数(返回列表),$()表达式里如果要嵌套一个其他变量var,也用 "$var "表示就可以了.
@H_839_83
@make --trace选项可以打印编译过程。编译的过程是依赖如下: make all -> OBJS ->SRC -> PROTOFILE
II.
@H_
874_20@PROTO_CC :=
protoc
INCLUDE := ../
include
PROTO_FLAGS := --cpp_out=$(INCLUD
E)
PROTO__sourcES := $(wildcard *.proto)
obj-y := $(PROTO__
sourcES:%.proto=$(INCLUD
E)/%.pb.c
C)
obj-y += $(PROTO__
sourcES:%.proto=$(INCLUD
E)/%.pb.h)
OBjeCT := #
unused
##############################
# change OB
jeCT to
set execute file name
##############################
all : $(obj-y)
.
PHONY: all
$(INCLUD
E)/%.pb.cc: %.
proto
$(PROTO_C
C) $(PROTO_FLAGS) $
^
@echo ‘generate file‘ $
@
clean:
rm -f $(obj-y)
更简单的版本如上,只生成对应pb文件,通过INCLUDE制定编译结果的目录。
References
https://yq.aliyun.com/articles/653475
大佬总结
以上是大佬教程为你收集整理的通用protoc Makefile全部内容,希望文章能够帮你解决通用protoc Makefile所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。