来自(稍微)过时的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.so
和librocksdb.a
文件复制到{{1} }}。这是一种可接受的方法吗?
注意:导出环境变量的方法不太适合我,因为我在我的主文件夹内的目录中构建了rocksdb - 我希望有一个更清晰的解决方案(解释你想要的方式)。
答案 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
希望这会有所帮助。 肯珀