Hallo Forum, ich bin mit meinem MACKEN-FILE am verzweifeln!!! zu meiner Geschichte: Möchte, mit einem XMC4500lite kit ein paar Sachen ausprobieren. Am XMC4500 interssiert mich die UART mit bis zu 64 Bits. Nun möchte ich mit WIN7 einem Makefile, Gnu Arm Tools, Mingw und CMSIS die Sachen übersetzen. Wenn ich alle benötigen .c und .h Files im gleichen Ordner/Verzeichnis habe wird mit einem einfachen Makefile die .elf Datei erzeugt. Ich möchte aber die Dateien in verschieden Unterverzeichnissen zum Makefile haben: Aufbau so: - Makefile - scr - inc - lib - CMSIS - wenn nötig weiter LIBs - obj // Object files - out // .elf, .map, .lst Files Leider bekomme ich mein Makefile nicht so hin, dass diverse .c-Files aus verchiedenen Unterverzeichnissen compiliert werden, und als .o-Files im obj-Verzeichnis abgelegt werden um daraus die .elf "gelinkt" zu werden. Auch findet der Compiler die verschiedenen Include - Unterverzeichnisse nicht? Ich kämpfe jetzt schon 3 Tage, auch mit dem Internet, um auf eine Lösung zu kommen. Normalerweise sollte dieses vorgehen nicht so abwägig sein, aber im Internet, auch hier in der Suche finde ich keine brauchbaren Infos wie ich das Makefile dazu bringe, um meinen Wunsch zu erzeugen. - wie bringe ich das Makefile dazu die .c und .h Dateinen in mehreren Unterverzeichnissen zu suchen? - wie bringe ich die Objects ins obj - Verzeichnis? - was hat das -I beim aneinanderhängen mehrer Include Pfade mit aufsich? - gibt es in einem Makefile keine einheitlichen Vorgehensweisen? Jedes Beispiel und Erklärversuche aus dem Internet sind alle immer irgenwie anderster !? Habe gespielt mit vpath (auch GROß), patsubst, addsuffix usw, aber ohne Erfolg. Bin für jeden Hinweis/Hilfe dankbar! Grüße
BarneyBub schrieb: > Ich kämpfe jetzt schon 3 Tage, auch mit dem Internet, um auf eine Lösung > zu kommen. In der Zeit hättest du 20 mal eclipse installieren können, welches dir die makefiles automatisch generiert ;-) Ohne IDE zu programmieren und Debuggen ist sehr lästig, daher brauchst du eclipse o.ä. onehin.
BarneyBub schrieb: > - wie bringe ich das Makefile dazu die .c und .h Dateinen in mehreren > Unterverzeichnissen zu suchen? VPATH auf die entsprechenden Unterverzeichnisse zeigen lassen > - wie bringe ich die Objects ins obj - Verzeichnis? OBJS=$(patsubst %.c,%.o,$(SRCS)) und ein entsprechendes Compile-Rule aufsetzen. > - was hat das -I beim aneinanderhängen mehrer Include Pfade mit > aufsich? man gcc Hat mit make nichts zu tun. > - gibt es in einem Makefile keine einheitlichen Vorgehensweisen? make ist ein mächtiges Werkzeug, das lernt man nicht in einer halben Stunde. Deswegen gibt es auch für ein und dasselbe Problem zig verschiedene Lösungen (von denen die, die man so im Internet findet, oft nicht die besten sind).
Um Dateien in Verzeichnissen zu suchen, google mal nach vpath (Alles in $(...) sind vorher sinnvoll gesetzte Variablen, falls noch nicht bekannt). vpath %.c $(VPATH_C) vpath %.cpp $(VPATH_CPP) vpath %.cc $(VPATH_CPP) Hiermit kann man angeben, in welchen Verzeichnisen nach Dateien gesucht werden soll. Ojekte ins Builddir bringst Du mit folgender Regel: $(BUILD_DIR)/%.o: %.c $(CC) -o $@ $(CFLAGS) $(INCL) -c $< Hier ist dann vpath wieder praktisch, da es so für alle C-Code Dateien gilt. Die Frage mit -I verstehe ich nicht ganz. Dem Compiler sagt man mit dem Include Paramter, wo er zusätzlich nach Header suchen soll, bevor er das in den Standardverz. macht. Hat nichts mit make zu tun. Pro Verzeichnis ein -I. Für Makefiles gibt es eine einheitliche Vorgehensweise, indem man sagt, was man bauen will, wovon das abhängt und Rezepte anfügt. Google mal nach Makefile + manual. Es gibt von Gnu selber gute Manuals. Make ist halt am Anfang schwierig und unschön. Nachdem man sich damit ein wenig auseinandergesetzt hat, ist es nur noch unschön. Ohne Einarbeitung ausserhalb von Foren wird das eine ewige Qual bleiben.
Beitrag #4939779 wurde vom Autor gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.