install
現在の Makefile にはターゲットがありません。
これは、長い間確立されてきた 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 でパッケージ化するために不可欠です。