在开发中,源文件依赖于.proto文件编译后的.pb.c文件,通过一次命令就能执行编译.proto文件以及编译源文件的动作:
两步编译proto文件和源文件
1. 编译.proto文件
PROTO_DIR = ./proto
OUT_DIR = ./out
mkproto: mkout//将./proto/%.proto文件编译成./out/%.pb.h和./out/%.pb.c
$(PROTOC) $(PROTOC_OPTS) --proto_path=$(PROTO_DIR) --nanopb_out=$(OUT_DIR) $(PROTO_DIR)/*.proto
mkout://没有out目录则创建
mkdir -p $(OUT_DIR)
2. 编译源文件
CSRCS = main.c
CSRCS += $(wildcard $(OUT_DIR)/*.pb.c)
CSRCS += $(NANOPB_DIR)/pb_decode.c
CSRCS += $(NANOPB_DIR)/pb_encode.c
CSRCS += $(NANOPB_DIR)/pb_common.c
demo : $(CSRCS)
$(CC) $(CFLAGS) -o $@ $^
如上先执行make mkproto,然后执行make demo可以成功编译,输出demo文件
一步编译proto文件和源文件
如上是两步不同独立的命令执行,就想着是否可以把两步合成一步来操作,如下:
all: mkproto demo