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. |