Ergebnis 1 bis 1 von 1

Thema: makefile verstehen

  1. #1
    Registrierter Benutzer
    Registriert seit
    21.06.2003
    Beiträge
    15

    makefile verstehen

    für ein embedded Projekt mit dem Arm GCC aus Launchpad habe ich mir ein File für
    GNU-Make erstellt. Es funktioniert, aber ich habe ich kräftig abgeschrieben weshalb
    ich nicht genau weis warum und wie es funktioniert.

    Code:
    COPTS = -Wall -Os -funsigned-char -xc -mlittle-endian -mthumb -mno-thumb-interwork
    COPTS += -c -mcpu=cortex-m3 -mno-tpcs-frame -gdwarf-2 --function-sections
    SOPTS = -mcpu=cortex-m3 -gdwarf-2 -mthumb
    LOPTS := -T linkfile.ld -Map=file.map --cref -gc-sections -o out.axf
    
    cpuinit.o:	COPTS += -O1 -save-temps
    
    SSOURCES := startup_stm32f10x_ld.s
    CSOURCES := cpuinit.c main.c flop.c misc.c 
    CSOURCES += stm32f10x_adc.c stm32f10x_dma.c stm32f10x_flash.c stm32f10x_gpio.c 
    CSOURCES += stm32f10x_rcc.c stm32f10x_tim.c stm32f10x_it.c
    
    OBJS  = $(CSOURCES:.c=.o)
    OBJS += $(SSOURCES:.s=.o)
    
    out.axf: $(OBJS)
    	arm-none-eabi-ld $(LOPTS) $(OBJS)
    	arm-none-eabi-objcopy -O ihex out.axf out.hex
    	arm-none-eabi-objcopy -O binary out.axf out.bin
    
    %.o: %.c
    	arm-none-eabi-gcc $(COPTS) -c $? -o $@
    
    %.o: %.s
    	arm-none-eabi-as $(SOPTS) -o $@ $?
    
    clean:
    	rm *.o
    	rm out.*
    cpuinit.o modifiziert die Compilerschalter für eine einzelne Datei in welcher gerade gedebuggt wird.

    Frage 1:
    %.o: %.c gibt die zu compilierenden Dateien an. GCC wird pro Quelldatei
    zum übersetzen genau einmal gestartet. Zuvor hatte ich dafür sinngemäs
    $(COBJS): $(CSOURCES) gehabt. Damit startet GCC nur einmal,
    wobei eine Liste von Dateien zum Compilieren übergeben wird.

    1a- was ist %.o: %.c - (implizite? Pattern Regel ?)
    1b- was nimmt %.o: %.c als Datenquelle ? (Verzeichnis wird nicht durchsucht)
    1c- wie ist der Unterschied in der Aufrufzahl des Compilers erklärbar?

    Frage 2:
    Das Projekt nutzt bislang keine Laufzeitbibliothek. Der ARM GCC beinhaltet aber eine
    Multilib (mit/ohne HW Floating Point, mit /ohne Arm-Thumb interwork usw) welche ich
    testen möchte. In den mitgelieferten makefiles wird diese über mir nicht verständliche
    Verschachtelungen verschiedener includierter .specs Dateien gesteuert. Ist die
    Zielarchitektur über eine (vordefinierte) Variable eingetragen, wählt der Linker die
    passende Lib automatisch aus. Dies funktioniert aber nur wenn ld nicht direkt,
    sondern über gcc aufgerufen wird. Wie muß dazu arm-none-eabi-ld $(LOPTS) $(OBJS)
    modifiziert werden ?
    Geändert von Janvi (28-03-2016 um 10:30 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •