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

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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.