Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Makefile für shared libraries

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.04.2007, 13:32 Uhr
fidel



Hätte diesen Post gerne an den Thread
www.fun-soft.de/showtopic.php?threadid=17237
gehängt, schaff es jedoch irgendwie nicht, dort eine Antwort zu verfassen. Vielen Dank an J-jayz-Z! Echt gelungener Artikel! Dieser hat mich dazu bewogen, ein kleines Makefile zu erstellen, in welchem ich bloss noch die Dateinamen der zu verarbeitenden shared libraries und der Quelldateien der Hauptapplikation anzugeben brauche. Ein einfaches make erstellt mir dann die benötigten libraries im Ordner lib und legt die entstandenen Objekte und das ausführbare Programm im Ordner bin ab. Hierbei müssen die Ordner lib und bin bereits bestehen und die Quelldateien im Ordner src liegen. Mein Standard-Projekt-Ordner sieht daher wie folgt aus:

Code:
- src
     main.cpp
     mylib.h
     mylib.cpp
- lib
- bin
Makefile


Das Makefile sieht wie folgt aus:

Code:
##
# CONFIG
##
# Name des ausführbaren Programmes
APP=myapp
# Library Files
LIBS=mylib.cpp
# Source Files der Hauptapplikation
SOURCE=main.cpp
# Compiler
CC=g++
# Compilerflags
CFLAGS=-O2 -W -Wall
LDFLAGS=
# Verzeichnis der Quellen
SRCDIR=src
# Verzeichnis der Binaries und Objects
BINDIR=bin

# Der Name des Library Verzeichnis lautet
# lib und kann nicht geändert werden!
##
# END CONFIG
##

OBJ=$(LIBS:.cpp=.o)
LIB=$(LIBS:.cpp=.so)
LIBR=$(LIB:.so=)
LIBN=$(LIBR:lib=)
LIBX=$(addprefix -l,$(LIBN))
OBJECT=$@


all: $(addprefix lib/,$(LIB))
    $(CC) -o $(addprefix $(BINDIR)/,$(APP)) $(addprefix $(SRCDIR)/,$(SOURCE)) -L./lib/ $(LIBX) $(CFLAGS) $(LDFLAGS)
    @echo "Falls shared libraries erstellt wurden, muss,"
    @echo "um das Programm nach make auszuführen,"
    @echo "dieses entweder mit make install installiert werden"
    @echo "oder der Umgebung die library mit"
    @echo "export LD_LIBRARY_PATH=./"
    @echo "bekannt gemacht werden. Im zweiten Fall kann"
    @echo "danach das Programm im Ordner lib ausgeführt"
    @echo "werden."

$(addprefix lib/,$(LIB)): $(addprefix $(BINDIR)/,$(OBJ))
    $(CC) -shared -o lib/lib$(subst lib/,,$(OBJECT)) $<

$(addprefix $(BINDIR)/,$(OBJ)): $(addprefix $(SRCDIR)/,$(LIBS))
    $(CC) -fPIC -c $(CFLAGS) $< -o $@

clean:
    rm -rf lib/*.so bin/*.o bin/$(APP)

install:
    cp -v $(BINDIR)/$(APP) /usr/local/bin/
    cp -v lib/*.so /usr/local/lib/

distclean:
    rm -v /usr/local/bin/$(APP)
    rm -v $(addprefix /usr/local/lib/lib,$(LIB))


Ich bin mir sicher es lässt sich noch einiges verbessern, einige Ersetzungen sind sicherlich auch fraglich, habs jedoch nicht anders hinbekommen und so funktionierts zumindest. ;-)
Für eine gtkmm Anwendung hab ich dann einfach noch die Zeilen CFLAGS und LDFLAGS ergänzt:

Code:
CFLAGS=`pkg-config gtkmm-2.4 --cflags` -O2 -W -Wall
LDFLAGS=`pkg-config gtkmm-2.4 --libs`


Viel Spass und für Anregungen, Kritik und Korrekturen herzlichen Dank!

Dieser Post wurde am 18.04.2007 um 13:32 Uhr von fidel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: