Hallo, In meinem Projekt (Eclipse / GCC) habe ich viele C-Dateien. Die Make-Datei habe ich selbst zusammengstrickt. Wenn ich unter Eclipse auf "Übersetzen" drücke, dann werden alle C-Sourcen neu übersetzt, auch die, die nicht geändert wurden. Wie kann ich das im Make-File abstellen? Oder gibt es einen Compiller-Schalter für den GCC der erkennt, dass die .o Datei neuer ist als die .c Datei? Das würde mir viel wartezeit ersparen... Danke für eure Antwort.
Make sollte aber eigentlich von alleine raffen, dass nur ein Delta übersetzt werden muss. Es sei denn, du hast die Targets mit diesem .PHONY Schlüsselwort gekennzeichnet. Das sagt make, dass es immer ausgeführt werden soll. Schonmal auf der Kommandozeile probiert?
Kommt drauf an wie das Makefile aussieht. Wenn da z.B. "gcc *.c" steht, dann kann make auch nichts machen. Also am besten mal die Doku lesen oder ein paar Beispiele anschauen wie man's richtig macht.
Vielen Dank für eure Antworten. Ich habe da folgende Zeile drin:
1 | .PHONY : all begin finish end sizebefore sizeafter gccversion build elf hex bin sym clean clean_list program |
Auch wenn ich diese auskommentiere, dann bringt es keine Besserung. Die .o Datei lasse ich an ein anderes Verzeichnis ausgeben, damit das src Verzeichnis nicht so voll wird. Kann es daran liegen? Gibt es nicht ein Compillerschalter für den GCC? Also make kennt ja nicht die Zusammenhänge, erst der GCC liest die .c Datei und sieht dann ob sich eventuell eine eingebundene Header Datei geändert hat, wenn ja, dann neu kompillieren.
Markus wrote: > Die .o Datei lasse ich an ein anderes Verzeichnis ausgeben, damit das > src Verzeichnis nicht so voll wird. Kann es daran liegen? ist das verzeichnis in den VPATH ? > Gibt es nicht ein Compillerschalter für den GCC? > Also make kennt ja nicht die Zusammenhänge, erst der GCC liest die .c > Datei und sieht dann ob sich eventuell eine eingebundene Header Datei > geändert hat, wenn ja, dann neu kompilieren. das ist eigentlich die aufgabe von make, die zusamenhänge zwischen *.c und *.h dateien muss man make explizit mitteilen (man kann das automatisch machen lassen, aber ein problem nach den anderen)
Hallo, ich geb dir mal ein Beispiel. CC=gcc CFLAGS=-DHAVE_CONFIG_H -g -O2 -Wall -Wundef -Wshadow LIBS= OBJS=lm.o lib.o interface.o misc.o parser.o cmd_op.o cmd_conf.o SRCS=$(OBJS:.o=.c) all: lm lm: .depend TAGS $(OBJS) $(CC) -g -o $@ $(OBJS) clean: rm -f *~ core tags TAGS lm $(OBJS) rm -f .depend TAGS: $(OBJS) etags *.c *.h ctags *.c *.h dep depend .depend: gcc -M $(CFLAGS) $(SRCS) > .depend -include .depend
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.