Hoi, ic habe, wi viele andere, das habe ich im Forum gesehen, das Problem, das dass AVR-Studio nur die eine Meldung für nich hat: make: *** No rule to make target `../16bittimer.c', needed by `16bittimer.o'. Stop. Im Programmers Notpad sowie in der CMD erhalte ich bei ausführen von make dieselbe Ausgabe. Ich habe früher in Assembler programmiert und versuche mich jetzt an C. Der Code soll einfach nur eeine LED blinken lassen. So zum Test. Der Sourcecode: Im Anhang Mit dem Makefile vom Studio (neueste Version) gibts kein target. Mit einem selbst erstellten, aus dem sample Verzeichniss von winavr findet er die Includes nicht. Das makefile vom Studio (no rule to make...): ######################################################################## ####### # Makefile for the project 16bittimer ######################################################################## ####### ## General Flags PROJECT = 16bittimer MCU = atmega168 TARGET = 16bittimer.elf CC = avr-gcc ## Options common to compile, link and assembly rules COMMON = -mmcu=$(MCU) ## Compile options common for all C compilation units. CFLAGS = $(COMMON) CFLAGS += -Wall -gdwarf-2 -DF_CPU=4915200UL -O0 -funsigned-char CFLAGS += -Wp,-M,-MP,-MT,$(*F).o,-MF,dep/$(@F).d ## Assembly specific flags ASMFLAGS = $(COMMON) ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2 ## Linker flags LDFLAGS = $(COMMON) LDFLAGS += ## Intel Hex file production flags HEX_FLASH_FLAGS = -R .eeprom HEX_EEPROM_FLAGS = -j .eeprom HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load" HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 ## Include Directories INCLUDES = -I"Q:\{Daten\{code\C\Sammlung_h-files" ## Objects that must be built in order to link OBJECTS = 16bittimer.o ## Build all: $(TARGET) 16bittimer.hex 16bittimer.eep 16bittimer.lss size ## Compile 16bittimer.o: ../16bittimer.c $(CC) $(INCLUDES) $(CFLAGS) -c $< ##Link $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET) %.hex: $(TARGET) avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@ %.eep: $(TARGET) avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ %.lss: $(TARGET) avr-objdump -h -S $< > $@ size: ${TARGET} @echo @sh avr-mem.sh ${TARGET} ${MCU} ## Clean target .PHONY: clean clean: -rm -rf $(OBJECTS) 16bittimer.elf dep/ 16bittimer.hex 16bittimer.eep 16bittimer.lss ## Other dependencies -include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*) Wie zu sehen ist wird der 16bit timer benutzt. Über den Laufwerksbuchstaben Q nicht wundern. Ich benutzte für meine Daten eine externe Festplatte. Dort gibt es auh den Ordner Sammlung_h-files. Dort befinden sich die h-files von winavr (neueste Version) und einigen anderen Compilern. Also liegen die h-files nicht im Verzeichnis mit dem Sourcecode. Dürfte aber kein Problem sein. Ich weiß das es ein oft beschriebenes Problem in den Foren ist. Aber ich habe noch keinen Beitrag gelesen der mir geholfen hat. Ich hoffe ihr könnt mir helfen. Verzweifele langsam. Danke schonmal
Ich kenn mich mit Makefiles ein bischen aus, vielleicht kann ich helfen, aber ich muss wissen wie der Verzeichnissbaum aussieht und welche Dateien drinn sind. Wichtig ist der Inhalt des Projektverzeichnisses, und der des übergeordneten Verzeichnisses(..) Feadi
Mahlzeit, ich werde Dich jetzt mal mit Daten "füttern" ;-) obwohl ich nicht ganz weiß ob es die richtigen sind. Also, alle Daten befinden sich auf der externen. Unter Q. Der Pfad zum Projekt ist: Q:\{Daten\{code\C\Projekte\2006\16bittimer Wobei 16bittimer eben der Projektordner ist. Darin enthalten sind: 16bittimer.aps 16bittimer.c makefile sowie die Ordner .dep und dep. Ersterer enthält eine Datei 16bittimer.o.d und letzterer ist leer. Die übergeordnete Ordnerhirarchie enthält nur Ordner. Das /2006, also der übergeordnete Ordner, enthält sonst keine weiteren Ordner und Dateien. [Ich habe es noch nicht gemacht, aber sollte ich vielleicht die benutzten h-files in den Projektordner bzw. in den übergeordnten Orner packen?] Der Ordner (aufwärts vom Projektordner) /Projekte enthält einen weiteren Ordner mit einem niht laufenden Projekt, das allerdings nicht weiter wichtig ist. Der nächste Ordner (/C) enthält das Ordner die entweder Tutorials oder Übungen enthalten. Diese Übungen sind allerdings eher "normales C" die Funtionieren auch alle. Gemacht wurden diese mit der lss-win32. Ebenso den Ordner Sammlung_h-files. Der enthält die Unterordner IAR und winavr. Benutzt werden die files von winavr. Ich das ist was Du wissen musst. Danke schonmal.
Hallo Ich vermute, dass die Datei 16bittimer.c nicht gefunden wird. Du schreibst ja, dass das Makefile im selben Verzeichnis liegt wie 16bittimer.c. Also versuch einfach mal das ../ wegzulassen. Tom
Danke soweit Aus der CMD herraus funtioniert es, aber im Studio noch nicht. Das Studio ändert das makefile vor dem Build wieder. Versuche mal die Dateien zu kopieren und im Wurzelverzeichniss des Studios abzulegen.
Habe bevor ich Kopieren wollte mal nochmal die makefile durchsucht die von winavr zur verfügung gestellt wurde. Habe dann festgestellt das ich einfach nur die falschen Slashes benutzt habe. \ anstatt /. Jetzt habe ich immer noch ne Fehlermeldung, allerdings ne andere: gcc plug-in: Error: Object file not found on expected location Q:\{Daten\{code\C\Projekte\2006\16bittimer\16bittimer.elf Make sure your makefile specifies the output .elf file as 16bittimer.elf gcc plug-in: Error: Object file not found on expected location Q:\{Daten\{code\C\Projekte\2006\16bittimer\16bittimer.elf Make sure your makefile specifies the output .elf file as 16bittimer.elf Ändere ich in der Makefile: # Target file name (without extension). TARGET = 16bittimer in # Target file name (without extension). TARGET = 16bittimer.elf kommt das bei rum: make: *** No rule to make target `16bittimer.elf.o', needed by `16bittimer.elf.elf'. Stop. Build failed with 1 errors and 0 warnings... Ändere ich den falschen Eintrag?
## Compile 16bittimer.o: ../16bittimer.c $(CC) $(INCLUDES) $(CFLAGS) -c $< Diese Regel sieht seltsam aus. In welchem Verzeichniss liegt denn nach dem Build die .o Datei? Probier doch mal das hier: ## Compile 16bittimer.o: ../16bittimer.c $(CC) $(INCLUDES) $(CFLAGS) -c $< echo PWD: $(shell PWD) # debug ls -la # debug ##Link $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET) echo PWD: $(shell PWD) # debug ls -la # debug Poste dann was dein Build alles ausgibt. Feadi
Also, danke, werde das ausprobieren. Allerdings sollte ich noch erwähnen das die letzte gepostete Fehlermeldung nach ausmärzen zweier Fehler im Code nur noch komm wenn ich im Studio den build ausführe. Wenn ich die selbe makefile nehme und in der CMD ausführe ist alles in Ordnung. Danach kann ich auch im Studio "builden".
hallo, vermutlich schon bekannt, falls nicht: avr-studio ist buggy, was die slashes angeht. es gibt einen patch, der das problem möglicherweise behebt. mal im avr-freaks forum nachsehen, da treibt sich auch der entwickler vom avrstudio rum..
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.