Hallo, Ich habe versucht, alle Quelldateien ( LCD, USART, Schrift-und Zeichensätze, ADC usw. ) die ich für verschiedene Projekte brauchen werde, in ein Unterverzeichnis auszulagern: Also alle nur einmal benötigten Funktionen nach C:\Daten_AR\ kopiert und versucht, ins makefile einbauen: und? Nichts geht :( > "make.exe" all makefile:545: *** multiple target patterns. Stop. > Process Exit Code: 2 > Time Taken: 00:00 Ich kann zwar etwas englisch und denke, er hat für eine Sache, die er machen muss, zwei verschiedene Verzeichnisse bekommen. Evtl. eine Diskrepanz zwischen absoluten und relativen Pfad? /*#### Makefile #####*/ # Output format. (can be srec, ihex, binary) FORMAT = ihex # Target file name (without extension). TARGET = main # Object files directory # To put object files in current directory, use a dot (.), do NOT make # this an empty or blank macro! OBJDIR = . # temporär auskommentiert # List C source files here. (C dependencies are automatically generated.) # SRC = $(TARGET).c ml5x_adc.c dds.c serial.c # SRC += dogm-graphic.c font.c # SRC += Fonts/font_proportional_16px.c # SRC += Fonts/font_proportional_8px.c # neu eingebastelt SRC = $(TARGET).c SRC += C:/Dateien_AR/AVR_GCC/ml5x_adc.c SRC += C:/Dateien_AR/AVR_GCC/dds.c SRC += C:/Dateien_AR/AVR_GCC/serial.c SRC += C:/Dateien_AR/AVR_GCC/dogm-graphic.c SRC += C:/Dateien_AR/AVR_GCC/font.c SRC += C:/Dateien_AR/AVR_GCC/Fonts/font_proportional_16px.c SRC += C:/Dateien_AR/AVR_GCC/Fonts/font_proportional_8px.c /*############# FEHLERMELDUNG ##############*/ > "make.exe" all makefile:545: *** multiple target patterns. Stop. > Process Exit Code: 2 > Time Taken: 00:00 /*##########makefile um zeile 540 herum########*/ ## Create library from object files. .SECONDARY : $(TARGET).a .PRECIOUS : $(OBJ) <--- hier ist die Zeile %.a: $(OBJ) @echo @echo $(MSG_CREATING_LIBRARY) $@ $(AR) $@ $(OBJ) Jedenfalls geht’s nicht – war klar, oder? Ich würde mich freuen, wenn mir jemand sagen kann, wie ich die Pfadangaben deklarieren muss, damit es am Ende funktioinert. Dankeschön Axelr.
Vermutung: du benutzt ein "make.exe", welches mit den C: in deinen Pfadnamen nicht klarkommt. Es wertet diese als "target pattern", also sowas wie in:
1 | all: hexfile |
Komme leider erst jetzt dazu, zu antworten. sry.
1 | # List C source files here. (C dependencies are automatically generated.) |
2 | # SRC = $(TARGET).c ml5x_adc.c dds.c serial.c |
3 | # SRC += dogm-graphic.c font.c |
4 | # SRC += Fonts/font_proportional_16px.c |
5 | # SRC += Fonts/font_proportional_8px.c |
6 | # SRC += Fonts/digits_32px.c |
7 | SRC = $(TARGET).c |
8 | SRC += ..//C/Dateien_AR/AVR_GCC/ml5x_adc.c |
9 | SRC += ..//C/Dateien_AR/AVR_GCC/dds.c |
10 | SRC += ..//C/Dateien_AR/AVR_GCC/serial.c |
11 | SRC += ..//C/Dateien_AR/AVR_GCC/dogm-graphic.c |
12 | SRC += ..//C/Dateien_AR/AVR_GCC/font.c |
13 | SRC += ..//C/Dateien_AR/AVR_GCC/Fonts/font_proportional_16px.c |
14 | SRC += ..//C/Dateien_AR/AVR_GCC/Fonts/font_proportional_8px.c |
15 | SRC += ..//C/Dateien_AR/AVR_GCC/Fonts/ Fonts/digits_32px.c |
Achso, es ist der aktuelle AVR-gcc und ich habe einen ATMega168A in Verwendung ;) Ich habe testhalber im AVR Studio einfach mal ein Projekt erzeugt um zu sehen, wie das dort gehandthabt wird und habe dort meine Quelldateien von "C:\Dateien_AR" usw. manuell einem Projekt hinzugefügt. ich weiss zwar im Moment nicht, wo jetzt hier das makefile abgelegt ist, aber die Fehlermeldung sagt:
1 | make: *** No rule to make target `..//C/Dateien_AR/AVR_GCC/dogm-graphic.c', needed by `dogm-graphic.o'. Stop. |
Also habe ich meinen Pfad im "richtigen" Projekt jetzt entsprechend angepasst und alle "C:/Dateien_AR/AVR_GCC/" durch ..//C/Dateien_AR/AVR_GCC/ ersetzt. Nun gibt es zwar keine Verwirrung bzgl. den Doppelpunkten aber er hat jetzt keine Regel, um Main zu erstellen. :(
1 | "make.exe" all |
2 | |
3 | -------- begin -------- |
4 | avr-gcc (WinAVR 20100110) 4.3.3 |
5 | Copyright (C) 2008 Free Software Foundation, Inc. |
6 | This is free software; see the source for copying conditions. There is NO |
7 | warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
8 | |
9 | make.exe: *** No rule to make target `main.elf', needed by `elf'. Stop. |
10 | |
11 | > Process Exit Code: 2 |
12 | > Time Taken: 00:00 |
Verwende ich die obenstehenden, auskommentierten Anweisungen,
1 | # SRC = $(TARGET).c ml5x_adc.c dds.c serial.c |
2 | # SRC += dogm-graphic.c font.c |
3 | # SRC += Fonts/font_proportional_16px.c |
4 | # SRC += Fonts/font_proportional_8px.c |
5 | # SRC += Fonts/digits_32px.c |
funktioniert alles. Viele Grüße und Danke für den Tip mit den Doppelpunkten ;) Axelr.
wenn du beim include den Pfad angibst, geht das ohne Probleme: #include <stdio.h> #include <avr/io.h> #include <avr/wdt.h> #include "C:\WinAVRkk\kklibx\defines.h" #include "C:\WinAVRkk\kklibx\colors.h"
Danke, das habe ich in der "main.c" heute früh ergänzt ( fiel mir auf dem Weg zur Arbeit auch ein ).
1 | .. |
2 | .. |
3 | #include <avr/pgmspace.h> |
4 | #include <util/delay.h> |
5 | #include "C:/Dateien_AR/AVR_GCC/pinbelegung.h" |
6 | #include "C:/Dateien_AR/AVR_GCC/ml5x_adc.h" |
7 | #include "C:/Dateien_AR/AVR_GCC/DDS.h" |
8 | #include "C:/Dateien_AR/AVR_GCC/dogm-graphic.h" |
9 | #include "C:/Dateien_AR/AVR_GCC/font.h" |
10 | #include "C:/Dateien_AR/AVR_GCC/serial.h" |
11 | .. |
12 | .. |
Axel R. schrieb: > Danke, das habe ich in der "main.c" heute früh ergänzt ( fiel mir auf > dem Weg zur Arbeit auch ein ). >
1 | > .. |
2 | > .. |
3 | > #include <avr/pgmspace.h> |
4 | > #include <util/delay.h> |
5 | > #include "C:/Dateien_AR/AVR_GCC/pinbelegung.h" |
6 | > #include "C:/Dateien_AR/AVR_GCC/ml5x_adc.h" |
7 | > #include "C:/Dateien_AR/AVR_GCC/DDS.h" |
8 | > #include "C:/Dateien_AR/AVR_GCC/dogm-graphic.h" |
9 | > #include "C:/Dateien_AR/AVR_GCC/font.h" |
10 | > #include "C:/Dateien_AR/AVR_GCC/serial.h" |
11 | > .. |
12 | > .. |
13 | > |
Es sollte doch aber auch mit -I gehen:
1 | #include "pinbelegung.h" |
...
1 | CFLAGS += -I"C:/Dateien_AR/AVR_GCC" |
Man nimmt doch keine absoluten Pfade als Include-Path! Stattdessen:
1 | #include "pinbelegung.h" |
nebst
1 | -I c:/Dateien_AR/AVR_GCC |
o.ä. als Compileroption.
Johann L. schrieb: > Man nimmt doch keine absoluten Pfade als Include-Path! > > Stattdessen: > >
1 | #include "pinbelegung.h" |
> > nebst
1 | -I c:/Dateien_AR/AVR_GCC |
o.ä. als Compileroption. Kam mir selbst komisch vor :) Habe ich bei anderen Projekten auch noch nie gesehen, das dort absolute Pfadangaben in den Quelldateien standen. Bei den Compileroptionen dann auf der Kommandozeile, im makefile dann NCIHT mehr mit "C:/xyz", sondern mit.."//C/xyz" weil er ja sonst mt den Doppelpunkten durcheinander kommt. Muss ich mir genau ansehen, wo ich welche Option plaziere, damit das compiliert wird. Muss man einfach hintersteigen... spannende Sache ;)
Eventuell brauchts auch nur ein paar Anführungszeichen um die Pfadangaben?
Danke, hatte ich probiert. Multiple Pattern Gab es als Antwort.
Sonst kopier ich mir in die winavr Installation irgendwo mit rein. Aber das muss doch so gehen. Ich muss dich meinen kompletten Kram irgendwo lassen können, ohne das jedesmal mit ins Projekt kopieren zu müssen.
Also mit meinem[tm] make unter Windos funktionieren folgende 3 Varianten:
1 | -I c:/foo |
2 | -I c:\foo |
3 | -I c:\\foo |
Dein Problem is woanners.
Axel R. schrieb: > Bei den Compileroptionen dann auf der Kommandozeile, im makefile dann > NCIHT mehr mit "C:/xyz", sondern mit.."//C/xyz" weil er ja sonst mt den > Doppelpunkten durcheinander kommt. In einer Variablenzuweisung ist der Doppelpunkt nie ein Problem. Nur bei sowas wie:
1 | C:/foo/bar: |
2 | # Kommandos, um C:/foo/bar herzustellen |
3 | |
4 | C:/foo/mumble: |
5 | # Kommandos für C:/foo/mumble |
würde make zur Meinung gelangen, hier zwei Regeln für das Ziel "C:" vorliegen zu haben. Andererseits bin ich ohnehin der Meinung, dass ausdrücklich für Windows compilierte make-Versionen (bspw. die, die bei WinAVR mit ausgeliefert wird) diese Situation ordentlich erfassen und damit umgehen können. Ich bin aber zugegebenermaßen alles andere als ein Äggsberde für Windows.
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.