Projektspezifisches Makefile
-
Hey!
Ich bekomme es einfach nicht hin, ein makefile für ein simples Programm zu erstellen. Hier was ich habe:
- main.cpp // Inkludiert MainWindow.h
- MainWindow.h // Inkludiert ui_MainWindow.h
- MainWindow.cpp
- ui_MainWindow.h
Diese Dateien inkludieren nur QT4-Header bzw. benötigt z.B. folgende Lib:
qtmain.libInclude-Pfad
file:/usr/local/Trolltech/Qt-4.1.0/includeLib-Pfad
file:/usr/local/Trolltech/Qt-4.1.0/libWie muss das Makefile aussehen? Unter Windows hab ich meine IDE, wo ich dann einfach die Dateien integriere und die Pfade zu den entsprechenden Ordnern setze, und es geht.
Ich komm damit gar nicht klar
-
wenn du unter linux/make bist
name: dependency g++ -c app.cpp
beachte das tab in der 2. zeile. generell werden die c/cpp files die nicht als executable gemacht werden sollen mit -c kompiliert, und dann beim binary mit angehängt:
dep1: g++ -c dep1.cpp main: dep1 g++ -o mainapp mainapp.cpp dep1.o
aufgerufen mit einem
$ make main
kompiliert es erst die dep1 und dann baut es die mainapp
-
Bei QT kannst du auch qmake verwenden, das erstellt die Makefiles.
-
Ok, ich hab es jetzt ernsthaft versucht und bin kläglich gescheitert.
Ich habe mir sogar "GNU Make" ausgedruckt (mit gmake will ich das nicht machen). "Gnu Make" finde ich echt schlecht gemacht, dass ist fast wie microsoft.com. Per google.de finde ich schneller den Downloadlink zum DirectX-SDK als über ms.com. So komme ich mir auch gerade bei "Gnu Make" vor.Ist jemand so nett und tippt mir das Makefile eben zusammen? Ich weiß, dass klingt so nach Hausaufgaben machen lassen, aber ich bekomme das nicht hin. Das Makefile könnte ich dann studieren.
Ein paar Sachen habe ich ja mittlerweile begriffen, aber meine Makefiles sind immer fehlerhaft
Hier mal einer meiner missratenen Versuche:
# Wie gebe ich die Libs/Header(verzeichnisse) an?! OUTDIR=Debug OBJECTS=$(OUTDIR)/MainWindow.o $(OUTDIR)/main.o $(OUTDIR)/ui_MainWindow.o app : $(OBJECTS) gcc -o app $(OBJECTS) main.o : gcc -c main.cpp MainWindow.o : MainWindow.h MainWindow.cpp gcc -c MainWindow.cpp ui_MainWindow.o : ui_MainWindow.h gcc -c ui_MainWindow.h clean : rm MainWindow $(OBJECTS)
Ergebnis
Makefile:4: *** commands commence before first target. Stop.
Hier nocheinmal der Aufbau des Programms:
- main.cpp // Inkludiert MainWindow.h
- MainWindow.h // Inkludiert ui_MainWindow.h
- MainWindow.cpp
- ui_MainWindow.h
Diese Dateien inkludieren nur QT4-Header bzw. benötigt z.B. folgende Lib:
qtmain.libInclude-Pfad
file:/usr/local/Trolltech/Qt-4.1.0/includeLib-Pfad
file:/usr/local/Trolltech/Qt-4.1.0/libWäre echt toll, wenn mir da jemand helfen würde.
-
Benutz doch qmake.
Pfade fürs linken etc kannst du doch angeben wie und wo du willst. Üblich ist LIBS für libraries oder LDFLAGS generell für Linkerflags und CFLAGS bzw. CXXFLAGS für Compiler-Optionen.
Der Fehler kommt vermutlich daher, da die Zeilen mit OUTDIR in extra Zeilen stehen und nicht in einer Zeile mit der Variablendeklaration.
-
Hallo,
hier was zum kopieren.
Zum einen ne Makefile die ich immer nehme, dann meine ultimake qmake File, die dir per Parameter ein anderes Target baut.
Zu deinem Makeproblem: Make ist sehr empfindlich gegen Whitespaces, die Einrückung muss einen Tab groß sein, und andere WS dürfen da nicht stehen.# Makefile, Einrückung jeweils 1 Tab breit muss wohl korrigiert werden. Danke Forum. CXXFLAGS = -g -Wall `fltk-config --cxxflags` CXX = g++ LIBS = `fltk-config --ldflags` -lpthread BASEDIR = sourcecode/ TARGET = $(BASEDIR)out.exec SOURCES = $(BASEDIR)common/types.cpp $(BASEDIR)common/thread.cpp $(BASEDIR)common/platform.cpp [..] EXT = cpp OBJECTS =$(patsubst %.$(EXT),%.o,$(SOURCES)) DEPS =$(patsubst %.$(EXT),%.dep,$(SOURCES)) $(TARGET): $(OBJECTS) $(DEPS) $(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) # -include $(DEPS) %.o: %.$(EXT) $(CXX) $(CXXFLAGS) -c $< -o $@ %.dep: %.$(EXT) $(CXX) $(CXXFLAGS) -MM $< -MT $(<:.$(EXT)=.o) > $@ .PHONY: clean clean: rm -f $(TARGET) $(OBJECTS) $(DEPS)
# qmake Datei in einem Verzeichnis überhalb des Sourcecodes. TEMPLATE = app DESTDIR = ../binary # Where to look for sourcecode files (HEADERS and SOURCES) SRC = ../sourcecode/ FORMS += ../resources/forms/designer/mainwindow.ui RESOURCES += ../resources/forms/designer/mainwindow.qrc TRANSLATIONS += ../languages/baja_en.ts # Build target for unit tests tests { message (Building unittests) CONFIG += qtestlib HEADERS += $${SRC}tests/exampletest.hpp \ $${SRC}application/headlessapplication.hpp SOURCES += $${SRC}tests/exampletest.cpp \ $${SRC}application/headlessapplication.cpp TARGET = unittests } # Regular build !tests { message (Normal build) HEADERS += $${SRC}main.hpp \ $${SRC}application/guiapplication.hpp SOURCES += $${SRC}main.cpp \ $${SRC}application/guiapplication.cpp } # Common files to all buildtargets HEADERS += $${SRC}common/logging/log4cxx.hpp \ $${SRC}view/mainwindow/mainwindow.hpp [..] SOURCE += $${SRC}common/logging/log4cxx.cpp \ $${SRC}view/mainwindow/mainwindow.cpp [..] LIBS += -llog4cxx DEFINES += QT_DLL CONFIG += qt warn_on debug
-
@kingruedi: Von Dir ist doch die "ultimate makefile" in der FAQ, oder nicht?! Die tut's doch!
-
Sgt. Nukem schrieb:
@kingruedi: Von Dir ist doch die "ultimate makefile" in der FAQ, oder nicht?! Die tut's doch!
hehe, schon fast vergessen. Aber die ist übrigens von volkard und denis (aka DrGreenthumb).
Also geh und lies die FAQ!