Hi! langsam funktioniert mein makefile schon recht gut. Die Source und Include Dateien werden korrekt aus einem Ordener src und include ausgelesen und kompiliert. Wie kann ich aber angeben, das die Objektdateien und das gelinkte Programm in ein Ordner bin gepackt wird - und nicht in den Ordner des makefiles... MAIN_OUT = main all: $(MAIN_OUT) $(MAIN_OUT): main.o danke!
Hmmm, sowas hatte ich auch schon mal ausprobiert..: ------------------------------------ MAIN_OUT = out/main all: $(MAIN_OUT) $(MAIN_OUT): out/main.o stm32f10x_it.o $(LIBPATH)/lib/libstm32.a ------------------------------------ output make: cs-make all cs-make: *** No rule to make target `out/main.o', needed by `out/main'. Stop.
Schau Dir mal diese Zeile genau an: $(MAIN_OUT): out/main.o stm32f10x_it.o $(LIBPATH)/lib/libstm32.a Expandiert man die Macros steht da: out/main: out/main.o stm32f10x_it.o [...] Also hängt das Target "out/main" mindestens von "out/main.o" ab. Und da liefert make schon die richtige Information: "No rule to make target `out/main.o'" Du solltest auch angeben, wie denn "out/main.o" erstellt werden soll. Derzeit verläßt Du Dich auf die eingebaute Regel, die da lautet: %.o:%.c "make" sucht also nach "out/main.c", um "out/main.o" zu erstellen, findet es nicht und jammert rum. Sag' "make" einfach, wie es "out/main.o" erstellen soll. Ein simples out/main.o: <woherauchimmer>/main.c sollte genügen, "make" glücklich zu machen.
Ach so. Daran, daß das schon das ganze Makefile sein könnte, hatte ich gar nicht gedacht :-) > Sag' "make" einfach, wie es "out/main.o" erstellen soll. Ein simples > > out/main.o: <woherauchimmer>/main.c > > sollte genügen, "make" glücklich zu machen. Eher nicht, da make dann nur die Abhängigkeit kennt, aber immer noch nicht weiß, wie es out/main.o aus main.c erstellen muß. Die eingebaute Regel paßt da ja nicht mehr. Man kann aber einfach die ganze Regel explizit hinschreiben. Wenn man das dann generisch macht, sieht das etwa so aus: out/%.o: %.c $(CC) $(CFLAGS) -c $< -o $@
Rolf Magnus wrote: > Ach so. Daran, daß das schon das ganze Makefile sein könnte, hatte ich > gar nicht gedacht :-) > >> Sag' "make" einfach, wie es "out/main.o" erstellen soll. Ein simples >> >> out/main.o: <woherauchimmer>/main.c >> >> sollte genügen, "make" glücklich zu machen. > > Eher nicht, da make dann nur die Abhängigkeit kennt, aber immer noch > nicht weiß, wie es out/main.o aus main.c erstellen muß. Die > eingebaute Regel paßt da ja nicht mehr. Stimmt. Ich vergesse immer daß das "Stem" bei "%.o: %.c" und "out/main.o" zu "out/main" wird. Und dann passt wieder %.c nicht dazu. > Man kann aber einfach die ganze Regel explizit hinschreiben. > Wenn man das dann generisch macht, sieht das etwa so aus: > > out/%.o: %.c > $(CC) $(CFLAGS) -c $< -o $@ Ja. Leider muß man das dann für alle einzelnen Unterverzeichnisse (wenn man mehrere Quellverzeichnisse in ein Ausgabeverzeichnis bauen will) einzeln angeben.
Dazu gibt's die Variable VPATH. Wenn du z.B. Quellcode-Files in Verzeichnissen namens foo und bar stehen hast, schreibst du einfach: VPATH = foo:bar vor die Regel, und schon durchsucht make diese beiden Verzeichnisse nach der Quellcode-Datei.
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.