Forum: Mikrocontroller und Digitale Elektronik AVR Studio 5: Probleme mit Pfadangaben im makefile


von Habakuk T. (tibatong)


Lesenswert?

Hallo zusammen,

ich habe AVR Studio 5.1 installiert, um ein bereits angelegtes Projekt 
fortzuführen. Dabei waren im makefile einige absolute Pfadangaben zu 
ändern, damit sie auf die Pfade in meinem System passen (schon mal 
unschön!). Bei der folgenden vermeintlich einfachen Änderung habe ich 
dann schon in die Sch.... gegfriffen:
1
# project name & path
2
PROJPATH     = D:\Software\Projects\Test
3
# paths of binaries
4
WINAVR      = C:\Programme\Atmel\AVR Studio 5.1\extensions\Atmel\AVRGCC\3.3.1.27\AVRToolchain
5
WINAVR_BIN   = $(WINAVR)/bin
6
#WINAVR_INC   = $(WINAVR)/avr32/include
7
WINAVR_INC   = $(PROJPATH)/AVR32cmp/inc
8
AVR32_LINKERSCRIPT = $(WINAVR)/avr32/lib/ldscripts

bezieht sich ja u.a. auf
1
$(HEX_OUT): $(DRI_OBJS) $(C_OBJS)
2
3
  #@echo Generating Objectfile:  exception.o
4
  @$(CC) -c $(OPT_AS) -o$(OBJ_DIR)/exception.o  $(SOURCE_DIR)/exception.S
5
  
6
  #@echo Linking and generating $*.elf
7
  @$(CC)  $(OPT_LC) $(C_OBJS) $(DRI_OBJS) $(OBJ_DIR)/exception.o -lm
8
  #@echo converting .elf to .hex
9
  @$(WINAVR_BIN)/avr32-objcopy -j .text -j .data -O ihex $(OBJ_DIR)/$(PROJECT_NAME).elf $(OBJ_DIR)/$(PROJECT_NAME).hex
10
  #@echo generating .lst File
11
  #@$(WINAVR_BIN)/avr32-objdump -h -S -j .text -j .data $(OBJ_DIR)/$(PROJECT_NAME).elf > $(OBJ_DIR)/$(PROJECT_NAME).lst
12
  @$(WINAVR_BIN)/avr32-objdump -h -S $(OBJ_DIR)/$(PROJECT_NAME).elf > $(OBJ_DIR)/$(PROJECT_NAME).lst
13
  #@echo size
14
  @$(WINAVR_BIN)/avr32-size $(OBJ_DIR)/$(PROJECT_NAME).elf
15
  @$(WINAVR_BIN)/avr32-size $(OBJ_DIR)/$(PROJECT_NAME).hex
16
  #@echo Moving files into Hex directory
17
  @-mv -f $(OBJ_DIR)/$@.* $(HEX_DIR)
18
  @-mv -f $(HEX_DIR)/*.elf $(ELF_DIR)

Kompilieren klappt wunderbar aber wenn ich beim Linken angekommen bin, 
dann bekommt das System Probleme mit den Leerzeichen im 
AVR-Installationsverzeichnis und kann das .elf-File nicht anlegen.

Kopiere ich jetzt die gesamte Toolchain aus dem 
AVR-Installationsverzeichnis in einen oberen Pfad und ändere jetzt in:
1
# project name & path
2
PROJPATH     = D:\Software\Projects\Test
3
# paths of binaries
4
WINAVR      = C:\Programme\Atmel\AVRToolchain

dann wird das .elf-File problemlos erzeugt. Ich bekomme jetzt allerdings 
noch Probleme bei der Erzeugung des .lst-Files, da er das Zeichen "\" 
nun auslässt und infolge dessen das Projektverzeichnis nicht findet.

Erst der Code:
1
# project name & path
2
PROJPATH     = D:/Software/Projects/Test
3
# paths of binaries
4
WINAVR      = C:/Programme/Atmel/AVRToolchain

löst alle Probleme!

Hat aber lange gedauert, bis ich das rausgefunden habe... Außerdem ist 
die Lösung total unelegant, da etwaige Update im Atmel Verzeichnis nun 
in meiner "Kopie" händisch nachgezogen werden müssen.

Da ich überhaupt keine Ahnung von makefiles habe wollte ich mal fragen 
ob wem etwas eleganteres einfällt?

Vielen Dank, HK

von Tutor (Gast)


Lesenswert?

Du hast ein makefile das für WINAVR geschrieben wurde. Aber du setzt 
paths für AVRtoolchain. Du solltest das nicht durchmischen.

Es gibt bekannte Probleme mit WINAVR makefiles, die unter AVRToolchain 
eingesetzt werden (u.a. wegen fehlender sh shell). Allgemein lassen sich 
diese aber benutzen, wenn im Systempath WINAVR hinter AVRtoolchain 
steht.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Da sind Leerzeichen (Stringende) im Pfad

von jb (Gast)


Lesenswert?

wie sieht, dass mit dem makefile bei ATmel Studio 6 aus? muss man bei 
Atmel Studio 6 auch ein makefile erstellen und funktioniert das alles 
automtisch? denn bei öffnen des makefiles, steht am oberen rand, nicht 
zu übersehen, ein text und der lautet

"Automatically-generated file. Do not edit!"

das heißt doch so viel. nichts anfassen wird automatisch erzeugt.

nun lese ich in manchen Beiträgen, wie die versuchen ein makefile zu 
erstellen.

kann mir das jemadn erklären?

gruß
jb

von Stefan (Gast)


Lesenswert?

Mit manuell erstellten makefiles kann man Funktionen hinzufügen, die das 
AVR Studio nicht unterstützt.

Bei meinem Webserver Modul rufe ich z.B. ein Perl-Script auf, um HTML 
und GIF Dateien in C-Quelltext umzuwandeln (Byte-Arrays), der erst dann 
vom C Compiler compiliert wird.

Insofern kann das manuelle Erstellen von Makefiles je nach Projekt 
durchaus Mehrwert bringen.

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.