簡體   English   中英

用於構建C ++ Google協議緩沖區項目的Makefile

[英]Makefile for building C++ Google Protocol Buffers Project

我剛剛開始鬼混使用Google Protocol Buffers,並且嘗試將來自協議緩沖區編譯器的C ++輸出文件合並到我的項目中。 到目前為止,我一直在為我的項目使用一個簡單的makefile,它可以完成所有共享相同擴展名的源文件。 我對源文件使用“ .cpp”,但Google協議緩沖區將其源輸出為“ .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

如果只想嚴格依賴Make,而不要依賴周圍的外殼,則可以添加另一組SRCOBJ變量,這將用作第二組依賴項。

將這些添加在第一組下面:

SRC1=$(wildcard *.pb.cc)
OBJ1=$(subst .pb.cc,.o,$(SRC1))

並更改.depend$(PROGRAM_NAME)規則:

.depend: $(SRCS) $(SRC1)


$(PROGRAM_NAME): $(OBJS) $(OBJ1)
    $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@


%.o: %.c
    $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) -c -o $@ $<

我無法使原始的Makefile正常工作,所以我做了一些更改,但我認為棘手的部分是make生成用於生成.o文件的隱式規則。 我認為對於.pb.cc文件,您需要生成.pb.o對象,以便隱式規則可以匹配它們。

嘗試這個:

PROGRAM_NAME = aserv
CC = gcc
CXX = g++
RM = rm -f

CXXFLAGS = --std=c++14 -pthread -g -O3 -MMD -MP
CPPFLAGS = -I/usr/local/include/
LDFLAGS = -L/usr/local/lib -L/usr/local/lib/boost
LDLIBS = -lrtaudio -lboost_system -lprotobuf

INSTALL_DIR = /usr/local/bin

SRCS = $(wildcard *.cpp) $(wildcard *.pb.cc)
OBJS = $(subst .pb.cc,.pb.o,$(subst .cpp,.o,$(SRCS)))
DEPS = $(subst .pb.cc,.pb.d,$(subst .cpp,.d,$(SRCS)))

all: $(PROGRAM_NAME)

$(PROGRAM_NAME): $(OBJS)
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) -o $@ $^ $(LDFLAGS) $(LDLIBS)

-include $(DEPS)

clean:
    $(RM) $(OBJS) $(PROGRAM_NAME)

install:
    cp  $(PROGRAM_NAME) $(INSTALL_DIR)

uninstall:
    $(RM) $(INSTALL_DIR)/$(PROGRAM_NAME)

dist-clean: clean
    $(RM) *~  $(DEPS)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM