В текущем 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.
person
The Real Edward Cullen
schedule
20.08.2014