将leveldb库加入自己的工程目录

本文介绍了如何将leveldb库集成到名为MyProject的工程中,包括库的头文件放置在Include/leveldb目录下,库文件位于Libs目录,源代码在Src目录,并给出了经过修改的Makefile内容,便于编译和测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工程目录

—MyProject
———Include
——————leveldb
—————————-*.h //leveldb库的所有头文件
———Libs
————-*.a
———Src
————-*.cpp
———Makefile

Makefile

以下makefile由网上万能makefile修改而来。

EXECUTABLE := magic#可执行文件名
LIBDIR := ./Libs#静态库目录
LIBS := libleveldb.a#静态库文件名
INCLUDES := ./Include/#头文件目录
SRCDIR := ./Src#除了当前目录外,其他源文件目录

###############= := ?= += ###############
# := 像是C里的赋值; = 像是C里的引用; ?= 如果没有被赋值过就赋予等号后边的值;
#example1
#A := foo
#B := $(A)
#A := bar
#这时B的值仍为foo
#example2
#A = foo
#B = $(A)
#A = bar
#这时B的值为bar
#make会将整个makefile展开后,再决定变量的值,也就是说变量的值将会是整个makefile中最后被指定的值。
#########################################

CC := g++
CFLAGS := -g -Wall -o3
CPPFLAGS := $(CFLAGS)
CPPFLAGS += $(addprefix -I,$(INCLUDES))

###########addprefix#####################
#字面意思,添加前缀
#为$(INCLUDES)的所有路径加上前缀 -I
#########################################



#CPPFLAGS += -MMD   #生成依赖文件*.d

RM := rm -f
########wildcard函数列举当前目录中扩展名为*.cpp的所有文件
SRCS := $(wildcard *.cpp) $(wildcard $(addsuffix /*.cpp, $(SRCDIR)))
#######
OBJS := $(patsubst %.cpp,%.o,$(SRCS))
###########patsubst 匹配替代的意思,将SRCS中找到的所有.cpp结尾的文件,然后把所有的.cpp换成.o
#DEPS := $(patsubst %.o,%.d,$(OBJS))

##############隐含规则###################
#$(EXECUTABLE)依赖于$(OBJS),但是makefile中没有指明$(OBJS)依赖谁,也没有命令生成他们
#这时make的隐含规则开始起作用;针对$(OBJS)中的每个目标,make自动调用
#$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@
#生成*.o文件
#$< 表示依赖文件列表的第一个文件名
#$@ 表示目标文件名
#########################################

.PHONY : all deps objs clean veryclean rebuild info

all : $(EXECUTABLE)

deps : $(DEPS)

objs : $(OBJS)

clean :
    @$(RM) $(OBJS)

$(EXECUTABLE) : $(OBJS)
    $(CC) -o $(EXECUTABLE) $(OBJS) $(addprefix $(LIBDIR)/,$(LIBS)) -lpthread

info :
    @echo $(SRCS)
    @echo $(OBJS)

测试

Main.cpp

#include <assert.h>  
#include <iostream>  
#include "leveldb/db.h" 

int main (int argc,char * argv[])  
{  
    leveldb::DB* db;  
    leveldb::Options options;  
    options.create_if_missing = true;  
    std::string dbpath = "testdb";  
    leveldb::Status status = leveldb::DB::Open (options, dbpath, &db);  
    assert (status.ok ());  
    std::string key = "test";  
    std::string val = "test_value";  
    status = db->Put (leveldb::WriteOptions (), key, val);  
    val.clear ();  
    status = db->Get (leveldb::ReadOptions (), key, &val);  

    std::cout << key << ": " << val << std::endl;  


    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值