目录结构如下:bin、build、obj、include、src、protos、third为目录
.
|-- bin
| |-- client
| `-- server
|-- build
| |-- makefile
| `-- obj
| |-- helloworld.grpc.pb.d
| |-- helloworld.grpc.pb.o
| |-- helloworld.pb.d
| `-- helloworld.pb.o
|-- include
|-- readme.md
`-- src
|-- build.sh
|-- client.cc
|-- protos
| |-- gencode.sh
| |-- helloworld.grpc.pb.cc
| |-- helloworld.grpc.pb.h
| |-- helloworld.pb.cc
| |-- helloworld.pb.h
| `-- helloworld.proto
|-- server.cc
`-- third
makefile内容如下:
# https://blog.csdn.net/qq_36243942/article/details/85161179
# https://blog.csdn.net/whahu1989/article/details/82078563
incdirs := ../include
srcdirs := ../src \
../src/third \
../src/protos
srcs := \
helloworld.pb.cc helloworld.grpc.pb.cc
objdir := obj
objlist := $(patsubst %.cc, $(objdir)/%.o, $(srcs))
INCDIR := $(patsubst %, -I%, $(incdirs))
#CFLAG = -Werror -I../include
CFLAG = \
-L/usr/local/lib `pkg-config --cflags protobuf grpc` \
-std=c++11 `pkg-config --libs protobuf grpc++ grpc` \
-Wl,--no-as-needed \
-lgrpc++_reflection -ldl \
-lpthread
#-Wl,--as-needed -ldl
vpath %.cc $(srcdirs)
vpath %.h $(incdirs)
.PHONY: all clean
all: $(objdir) $(objlist)
@echo base lib compile done
client: $(objlist)
g++ -o ../bin/client ../src/client.cc $^ $(CFLAG)
server: $(objlist)
g++ -o ../bin/server ../src/server.cc $^ $(CFLAG)
$(objdir):
mkdir $(objdir)
$(objdir)/%.o: %.cc
g++ -MD $(CFLAG) $(INCDIR) -c $< -o $@
clean:
rm -fr $(objdir)