Forum: Mikrocontroller und Digitale Elektronik Schneller Kompillieren (Cortex mit GNU C-Compiller)


von Markus (Gast)


Lesenswert?

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.

von Robert W. (rweber)


Lesenswert?

make ist das tool deiner Wahl.

Siehe: http://www.gnu.org/software/make/manual/make.html

von Andreas G. (andy1988)


Lesenswert?

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?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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.

von Markus (Gast)


Lesenswert?

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.

von Gerard C. (gerardchoinka)


Lesenswert?

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)

von Robert W. (rweber)


Lesenswert?

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
Noch kein Account? Hier anmelden.