Forum: Mikrocontroller und Digitale Elektronik wie erkläre ich dem Makefile, nicht ständig alle Dateien neu zu erstellen?


von makefileneuling (Gast)


Lesenswert?

Hallo,

ich arbeite mich gerade in die freeRTOS-Umgebung für den AVR32 ein. 
Dafür bietet Atmel bereits einen fertigen download, der auf dem 
EvalBoard EVK1100 läuft.

Nun sehe ich, dass mit dem mitgelieferten Make-file IMMER alle 
Objekt-Dateien neu gebaut werden, auch wenn nur eine einzige *.c-Datei 
geändert wurde (auch wenn nur ein Leerzeichen hinzugefügt wurde).

Normaler weise kenne ich es so, dass der Compiler (GCC) in dem Fall nur 
die zuletzt geänderten Dateinen neu baut (oder dessen Abhängigkeiten). 
Leider habe ich mit Makefiles nicht viel Erfahrung.
Kann mir jemand sagen an welcher Stelle ich genauer suchen sollte, damit 
ich dem compiler sagen kann, dass er ungeänderte Dateinen nicht erneut 
bauen braucht?

In der Hoffnung, dass es hilfreich ist, habe ich mal die aufgelisteten 
Optionen für den Compiler mit angefügt (und versucht etwas 
übersichtlicher zu gestalten):
1
-DFREERTOS_USED -DBOARD=GB_CAM_CLIENT_BOARD -DACCESS_MEM_TO_RAM_disABLED  
2
-I"../src" 
3
-I"../src/asf/avr32/boards" 
4
-I"../src/asf/avr32/boards/evk1100" 
5
-I"../src/asf/avr32/components/memory/sd_mmc/sd_mmc_spi" 
6
-I"../src/asf/avr32/drivers/cpu/cycle_counter" 
7
-I"../src/asf/avr32/drivers/flashc" 
8
-I"../src/asf/avr32/drivers/gpio" 
9
-I"../src/asf/avr32/drivers/intc" 
10
-I"../src/asf/avr32/drivers/pm" 
11
-I"../src/asf/avr32/drivers/spi" 
12
-I"../src/asf/avr32/drivers/tc" 
13
-I"../src/asf/avr32/drivers/usart" 
14
-I"../src/asf/avr32/drivers/usbb/_asf_v1" 
15
-I"../src/asf/avr32/drivers/usbb/_asf_v1/enum" 
16
-I"../src/asf/avr32/drivers/usbb/_asf_v1/enum/device" 
17
-I"../src/asf/avr32/drivers/usbb/_asf_v1/enum/host" 
18
-I"../src/asf/avr32/services/fs/fat" 
19
-I"../src/asf/avr32/services/usb/_asf_v1" 
20
-I"../src/asf/avr32/services/usb/_asf_v1/class/mass_storage/examples"
21
-I"../src/asf/avr32/services/usb/_asf_v1/class/mass_storage/examples/conf" 
22
-I"../src/asf/avr32/services/usb/_asf_v1/class/mass_storage/examples/enum" 
23
-I"../src/asf/avr32/services/usb/_asf_v1/class/mass_storage/examples/enum/device" 
24
-I"../src/asf/avr32/services/usb/_asf_v1/class/mass_storage/examples/prj_freertos/freertos" 
25
-I"../src/asf/avr32/services/usb/_asf_v1/class/mass_storage/examples/ushell" 
26
-I"../src/asf/avr32/services/usb/_asf_v1/class/mass_storage/examples/virtual_mem" 
27
-I"../src/asf/avr32/services/usb/_asf_v1/class/mass_storage/host_mem" 
28
-I"../src/asf/avr32/services/usb/_asf_v1/class/mass_storage/scsi_decoder" 
29
-I"../src/asf/avr32/utils" 
30
-I"../src/asf/avr32/utils/debug" 
31
-I"../src/asf/avr32/utils/preprocessor" 
32
-I"../src/asf/common/boards" 
33
-I"../src/asf/common/components/memory/data_flash/at45dbx/_asf_v1" 
34
-I"../src/asf/common/services/storage/ctrl_access" 
35
-I"../src/asf/common/utils" 
36
-I"../src/asf/thirdparty/freertos/source/include" 
37
-I"../src/asf/thirdparty/freertos/source/portable/gcc/avr32_uc3" 
38
-I"../src/asf/thirdparty/newlib_addons/libs/include" 
39
-I"../src/config" 
40
-I"../src/asf/avr32/boards/gb_cam_client"  
41
-O0 -fdata-sections -ffunction-sections -g3 -Wall -c -std=gnu99 -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax  -mpart=uc3a0512

Danke schon mal für eure Tipps.

von holger (Gast)


Lesenswert?

>In der Hoffnung, dass es hilfreich ist, habe ich mal die aufgelisteten
>Optionen für den Compiler mit angefügt

Das hat mit den Compileroptionen nichts zu tun.

Wenn vor dem compilieren ein "make clean" gemacht wird,
dann wird auch immer das komplette Projekt neu übersetzt.

Da stimmt wohl eher eine Einstellung in deiner IDE nicht.

von Axel S. (a-za-z0-9)


Lesenswert?

makefileneuling schrieb:

> Nun sehe ich, dass mit dem mitgelieferten Make-file IMMER alle
> Objekt-Dateien neu gebaut werden, auch wenn nur eine einzige *.c-Datei
> geändert wurde (auch wenn nur ein Leerzeichen hinzugefügt wurde).

Woran siehst du das?

Selbstverständlich kann man auch kaputte Makefiles bauen, etwa indem man 
für jedes Objektfile auch jedes Sourcefile als Dependency aufführt. Oder 
indem man zwischenzeitlich erzeugte Files (z.B. Objektfiles) löscht, 
wenn "man sie nicht mehr braucht".

Wenn du make verstanden hast, dann schau dir halt mal das Makefile an, 
ob es offensichtliche Fehler macht.


XL

von Klaus W. (mfgkw)


Lesenswert?

Außerdem kann man sich mit falscher Uhrzeit ein Bein stellen, z.B. indem 
über ein Netzlaufwerk die Quellen wg. falsch gestellter Uhrzeit immer 
neuer erscheinen als die lokal herumliegenden Objektdateien.

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.