【发布时间】:2016-04-22 06:54:55
【问题描述】:
我刚开始使用 Google Protocol Buffers 并试图将来自协议缓冲区编译器的 C++ 输出文件合并到我的项目中。到目前为止,我一直在为我的项目使用一个简单的 makefile,它可以构建共享相同扩展名的源文件。我对源文件使用“.cpp”,但 Google Protocol Buffers 将其源输出为“.pb.cc”文件。我需要能够将两种类型的源文件编译并链接到一个可执行文件中。
我已经搜索和摆弄我的 makefile 几个小时了,但没有成功。
我当前的 Makefile:
PROGRAM_NAME=aserv
CC=gcc
CXX=g++
RM=rm -f
CPPFLAGS=-g --std=c++14 -O3 -I/usr/local/include/
LDFLAGS=-g -L/usr/local/lib -L/usr/local/lib/boost
LDLIBS= -lrtaudio -pthread -lboost_system -lprotobuf
INSTALL_DIR = /usr/local/bin/
SRCS=$(wildcard *.cpp)
OBJS=$(subst .cpp,.o,$(SRCS))
all: $(PROGRAM_NAME)
$(PROGRAM_NAME): $(OBJS)
$(CXX) $(LDFLAGS) -o $(PROGRAM_NAME) $(OBJS) $(LDLIBS)
depend: .depend
.depend: $(SRCS)
rm -f ./.depend
$(CXX) $(CPPFLAGS) -MM $^>>./.depend;
clean:
$(RM) $(OBJS) $(PROGRAM_NAME) .depend
install:
cp $(PROGRAM_NAME) $(INSTALL_DIR)$(PROGRAM_NAME)
uninstall:
$(RM) $(INSTALL_DIR)$(PROGRAM_NAME)
dist-clean: clean
$(RM) *~ .depend
include .depend
我还不太精通编写 makefile,所以我只是不知道该怎么做才能完成这项工作。
如果有帮助,我在 Ubuntu 16.04 beta 上安装了 GNU make 4.1 和 gcc 5.3.1
【问题讨论】:
-
两个小注解,最好使用内置变量,例如
$@(目标名称)或$^(以空格分隔的目标依赖项列表)。此外,必须在链接对象之前链接库。
标签: c++ makefile protocol-buffers gnu-make