web-dev-qa-db-ja.com

Makefileに「makeinstall」を実装する方法は?

これが私が使用しているリポジトリです: https://github.com/Garuda1/unixlib

コンパイルしたlib(_unixlib.a_)とヘッダー(_unixlib.h_)をどこに置いて、lib(Linux-x86またはLinux-x86_64)を簡単に使用できるようにする必要があるかを知りたいです。コンパイルすることによって:

_$ gcc my_source.c -lunixlib
_

_my_source.c_にヘッダーを含めます。

これをMakefileに追加すると思います。

_install:
    mv $(NAME).a $(LIB_PATH)
    mv unixlib.h $(HEADER_PATH)
_

しかし、$(LIB_PATH)$(HEADER_PATH)が何であるかはわかりません...

5
Garuda1

通常、UNIXシステムでは、ヘッダーは$PREFIX/includeに移動し、ライブラリファイルは$PREFIX/libに移動します。ここで、PREFIX/usrまたは/usr/localなどです。 Linuxでは、ライブラリをこれらのディレクトリにインストールすると、gcc my_source.c -lunixlibだけで必要に応じてgccによって検出されます。

PREFIX環境変数は、そのプレフィックスを提供するためにさまざまなビルドツールで一般的に使用されます。

また、DESTDIR変数を使用することをお勧めします。少なくともDebianパッケージツールで使用されます。

したがって、makefileは次のようになります。

#PREFIX is environment variable, but if it is not set, then set default value
ifeq ($(PREFIX),)
    PREFIX := /usr/local
endif

install: unixlib.a
    install -d $(DESTDIR)$(PREFIX)/lib/
    install -m 644 unixlib.a $(DESTDIR)$(PREFIX)/lib/
    install -d $(DESTDIR)$(PREFIX)/include/
    install -m 644 unixlib.h $(DESTDIR)$(PREFIX)/include/

たとえば、提供されたDESTDIRにディレクトリが存在しない場合に備えて、install -d ...が使用されることに注意してください。

makeの非再帰的なテンプレートを見て、いくつかのヒントを見つけることもできます: https://github.com/igagis/prorab/blob/master/src/prorab.mk

16
igagis