2016-10-06 3 views
0

Also hier ist das Repo Ich arbeite mit: https://github.com/Garuda1/unixlibWie "make install" in einem Makefile zu implementieren?

Ich mag gerne wissen, wo mein kompilierte lib (unixlib.a) und wo mein Kopf (unixlib.h) so sein sollte, in der Lage sein, die lib zu verwenden (unter Linux-x86 oder Linux-x86_64) einfach durch Kompilieren mit:

$ gcc my_source.c -lunixlib 

und einschließlich des Headers in my_source.c.

Ich glaube, ich fügen Sie diese Makefile tun:

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

aber ich weiß nicht, was $(LIB_PATH) und $(HEADER_PATH) sind ...

+0

Warum 'mv'? Dies entfernt die Header-Datei aus Ihrem Quellverzeichnis. 'cp' oder' install' werden normalerweise hier verwendet. Die Zielpfade sind normalerweise so etwas wie '$ (Präfix)/lib' und' $ (Präfix)/include'; Wo möchten Sie Ihre Dateien installieren? –

+0

Ich möchte sie installieren, wo sie gehen müssen, im Grunde, wenn ich 'foo.c' erstellen, in dem ich' # ', möchte ich in der Lage sein, es mit' gcc -lunixlib foo.c' – Garuda1

+0

zu kompilieren Wo sie hin müssen "ist Distro-/Flavour-abhängig und in Ihrem Fall auf den Standard-Include/Lib-Pathes für gcc. Du solltest für '/ usr/local' als * prefix * gehen, was' LIB_PATH = $ (Präfix)/lib' und 'HEADER_PATH = $ (Präfix)/include' bedeutet, wie Karsten Koop mit' prefix =/usr/local' geschrieben hat . '/ usr /' wird im Allgemeinen vom Distros-Paketmanager verwaltet und '/ usr/local' wird üblicherweise für" lokale Installationen "verwendet - [Sie können darüber in der FHS nachlesen] (https://en.wikipedia.org/ Wiki/Dateisystem_Hierarchie_Standard). Builder können sie mit 'make install prefix =/home/example 'überschreiben – makadev

Antwort

2

Normalerweise in UNIX-Systemen die Header gehen zu $PREFIX/include, Bibliotheksdateien gehe zu $PREFIX/lib, wo PREFIX/usr oder /usr/local oder was auch immer sein kann. Wenn Sie in linux Ihre Bibliothek in diesen Verzeichnissen installieren, wird sie von gcc wie gewünscht mit nur gcc my_source.c -lunixlib gefunden.

Die Umgebungsvariable PREFIX wird häufig von verschiedenen Build-Tools zur Bereitstellung dieses Präfix verwendet.

Ich würde auch empfehlen, DESTDIR Variable zu verwenden, wird es von Debian-Packaging-Tools mindestens verwendet.

So würde die Make-Datei wie:

#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/ 

Hinweis, die install -d ... nur für den Fall verwendet, wenn Verzeichnis nicht in den mitgelieferten DESTDIR zum Beispiel nicht vorhanden ist.

Sie können auch einen Blick auf meine nicht-rekursive Vorlage für make müssen einige Hinweise finden: https://github.com/igagis/prorab/blob/master/src/prorab.mk