wie erkläre ich dem Makefile, nicht ständig alle Dateien neu zu erstellen?

Gast #2609707
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.
Gast #2609712
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.
#2610110
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren