RocksDB进行安装

时间:2014-08-19 21:09:02

标签: makefile rocksdb

来自(稍微)过时的documentation on pyrocksdb,它说:

"如果您不想致电make install导出以下环境变量:"

$ export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}:`pwd`/include
$ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:`pwd`
$ export LIBRARY_PATH=${LIBRARY_PATH}:`pwd`

但是installation instructions for RocksDB似乎没有提及任何类型的install目标!

是否有从源代码安装RocksDB的可接受程序?


我的想法是将include目录的内容从rocksdb目录复制到/usr/local/include之类的地方,并将librocksdb.solibrocksdb.a文件复制到{{1} }}。这是一种可接受的方法吗?

注意:导出环境变量的方法不太适合我,因为我在我的主文件夹内的目录中构建了rocksdb - 我希望有一个更清晰的解决方案(解释你想要的方式)。

3 个答案:

答案 0 :(得分:3)

当前Makefile中没有install目标。

这打破了编写Makefile(或者几乎所有其他构建系统......)的长期惯例;它应被视为缺陷。

没有花费大量时间分析我无法确定,但安装目标应该是:

prefix=/usr/local
bindir=$(prefix)/bin
# Normally you'd write a macro for this; 'lib' for 32-bit, 'lib64' for 64...
libdir=$(prefix)/lib64
includedir=$(prefix)/include

# Define this to be the directory(s) the headers are installed into.
# This should not include the 'include' element:
#    include/rocksdb/stuff -> rocksdb/stuff
HEADER_DIRS=...

# Define this so all paths are relative to both the $CWD/include directory...
# so include/rocksdb/foo.h -> HEADER_FILES=rocksdb/foo.h
HEADER_FILES=...

.PHONY: install
install: $(TOOLS) $(LIBRARY) $(SHARED) $(MAKEFILES)
     mkdir -p $(DESTDIR)$(bindir)
     mkdir -p $(DESTDIR)$(libdir)
     mkdir -p $(DESTDIR)$(includedir)
     for tool in $(TOOLS); do \
         install -m 755 $$tool $(DESTDIR)$(bindir); \
     done
     # No, libraries should NOT be executable on Linux.
     install -m 644 $(LIBRARY) $(DESTDIR)$(libdir)
     install -m 644 $(SHARED3) $(DESTDIR)$(libdir)
     ln -s $(SHARED3) $(DESTDIR)$(libdir)/$(SHARED2)
     ln -s $(SHARED2) $(DESTDIR)$(libdir)/$(SHARED1)
     for header_dir in $(HEADER_DIRS); do \
         mkdir -p $(DESTDIR)$(includedir)/$$header_dir; \
     done
     for header in $(HEADER_FILES); do \
         install -m 644 include/$$header $(DESTDIR)$(includedir)/$$header; \
     done

这样,您只需执行以下操作即可将文件安装到/usr/local

make install

然而,它的参数化程度如此之高,是因为您可以更改目标文件夹,而无需修改Makefile。例如,要将目的地更改为/usr,您只需执行以下操作:

make prefix=/usr install

或者,如果你想测试安装过程,而不是弄乱你的文件系统,你可以这样做:

make DESTDIR=/tmp/rocksdb_install_test prefix=/usr install

这会将文件放入/tmp/rocksdb_install_test/usr,然后您可以检查这些文件是否在您希望的位置...当您开心时,您可以rm -Rf /tmp/rocksdb_install_test清理。

我使用的变量对于使用RPM或DEB进行打包至关重要。

答案 1 :(得分:3)

RocksDB最近有make install。如果您使用的是最新版本,则应该可以在RocksDB中执行make install

答案 2 :(得分:0)

我使用的是ubuntu 16.04

DEBUG_LEVEL=0 make shared_lib install-shared

通过这种方式,已在生产模式下生成安装。

如果您想节省时间,可以通过传递-j [n]来指定流程中使用的处理器数量,在我的情况下,-j4

DEBUG_LEVEL=0 make -j4 shared_lib install-shared

对于ubuntu,这已经足够了,但是对于docker的ubuntu,你应该指定lib的安装位置。

export LD_LIBRARY_PATH=/usr/local/lib

希望这会有所帮助。 肯珀