Forum: Compiler & IDEs incremental build ARM GCC make file


von Mat. K. (matthias_kornfield)


Lesenswert?

Hi
ich habe ein älteres make file(ARM GCC) und auch wenn sich nur in einem 
file sich was ändert , muss ich alles neu kompilieren, was natürlich 
viel Zeit kostet.
Welche Zeile in so ein make file ist für ein incremntal build 
verantwortlich?
Danke

: Bearbeitet durch User
von 900ss (900ss)


Lesenswert?

Wäre sicher hilfreich, das Makefile hier zur Verfügung zu stellen.

Ansonsten lautet die Antwort Zeile 42 ;)

von simon (Gast)


Lesenswert?

Mat. K. schrieb:
> Hi
> ich habe ein älteres make file(ARM GCC) und auch wenn sich nur in einem
> file sich was ändert , muss ich alles neu kompilieren, was natürlich
> viel Zeit kostet.
> Welche Zeile in so ein make file ist für ein incremntal build
> verantwortlich?
> Danke

Möglicherweise wird vor dem Build ein Touch ausgeführt.

von Bauform B. (bauformb)


Lesenswert?

Unter Umständen passiert das, wenn die PC-Uhr nach geht. Oder umgekehrt: 
beim Kopieren ging eine Uhr falsch und alle Quellen haben ein Datum in 
der Zukunft bekommen.

von Rolf M. (rmagnus)


Lesenswert?

Mat. K. schrieb:
> Welche Zeile in so ein make file ist für ein incremntal build
> verantwortlich?

Das ist nicht eine einzelne Zeile. Make macht das von selbst, wenn im 
Makefile nicht gerade irgendwas steht, das das blockiert. Da gibt's 
viele Möglichkeiten, wie das passieren kann.

Bauform B. schrieb:
> Unter Umständen passiert das, wenn die PC-Uhr nach geht. Oder umgekehrt:
> beim Kopieren ging eine Uhr falsch und alle Quellen haben ein Datum in
> der Zukunft bekommen.

Wenn das Datum in der Zukunft liegt, gibt make aber eine entsprechende 
Warnung aus.

von N. M. (mani)


Lesenswert?

Mat. K. schrieb:
> Hi
> ich habe ein älteres make file(ARM GCC) und auch wenn sich nur in einem
> file sich was ändert , muss ich alles neu kompilieren, was natürlich
> viel Zeit kostet.

Kommt natürlich auch auf den Code an. Wenn sich jedes CPP einen Header 
reinzieht den du verändert hast, dann ist es die Natur der Sache das 
alles neu kompiliert.
Es ist also sehr davon abhängig wie sauber der Ersteller darauf geachtet 
hat unnötige Header nicht zu inkludieren.

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Mat. K. schrieb:
> Welche Zeile in so ein make file ist für ein incremntal build
> verantwortlich?

Das ist nicht nur eine Zeile - dependencies blähen Makefiles richtig 
böse auf, und werden i.d.R. automatisch per Skript (oder Makefile ;-) 
generiert.

Das führt dann aber auch nur dazu das Änderungen an Headern mitunter 
nicht richtig erkannt und Files nicht korrekt compiliert werden - d.h. 
man muss doch öfters ein "make clean && make" ausführen.

Die eigentliche Antwort auf das Problem des OP ist eine moderne CPU mit 
20+ Threads, die die vielen C File in kurzer Zeit durchkompilieren kann.

Ich bin mit meinem 3900X hier durchaus zufrieden, und der sieht öfters 
die 200+ Source Files in Zephyr Projekten.

von Oliver S. (oliverso)


Lesenswert?

Jim M. schrieb:
> Das ist nicht nur eine Zeile - dependencies blähen Makefiles richtig
> böse auf, und werden i.d.R. automatisch per Skript (oder Makefile ;-)
> generiert.

Da es ja hier um C geht, macht das der Compiler, zumindest seit diesem 
Jahrtausend, und das äusserst zuverlässig. Da bläht dann gar nichts.

Jim M. schrieb:
> Das führt dann aber auch nur dazu das Änderungen an Headern mitunter
> nicht richtig erkannt und Files nicht korrekt compiliert werden - d.h.
> man muss doch öfters ein "make clean && make" ausführen.

Nur, wenn man es nicht richtig macht.

Jim M. schrieb:
> 200+ Source Files

Ja bei solchen Kleinprojekten kann man natürlich einfach immer alles neu 
compilieren. Wenn es dann mal etwas größer wird, muß das nicht mehr 
sein.

Oliver

von Rolf M. (rmagnus)


Lesenswert?

Oliver S. schrieb:
> Jim M. schrieb:
>> Das ist nicht nur eine Zeile - dependencies blähen Makefiles richtig
>> böse auf, und werden i.d.R. automatisch per Skript (oder Makefile ;-)
>> generiert.
>
> Da es ja hier um C geht, macht das der Compiler, zumindest seit diesem
> Jahrtausend, und das äusserst zuverlässig. Da bläht dann gar nichts.

Normalerweise nutzt man per make den Compiler, um zusätzliche Makefiles 
zu generieren, die die Abhängigkeiten enthalten. Die müssen dann im 
Haupt-Makefile eingebunden werden, und make löst das dann entsprechend 
auf. Wie sollte der Compiler das auch tun?

>> Das führt dann aber auch nur dazu das Änderungen an Headern mitunter
>> nicht richtig erkannt und Files nicht korrekt compiliert werden - d.h.
>> man muss doch öfters ein "make clean && make" ausführen.
>
> Nur, wenn man es nicht richtig macht.

Oder wenn man das Dependency-File gar nicht erzeugt und make dann nicht 
weiß, welche C-Files von welchen Headern abhängen.

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.