Hallo,
ich habe wie andere auch das make Problem. habe mich an das Tutorial
gehalten, dortiges makefile benutzt.
Anders als bei den anderen brichts nicht bei .o sondern bei .elf ab.
Nun hab ich mal "make -d" gemacht, und sehr merkwürdiges rausbekommen.
Irgendwie scheint es zu glauben das Target sei makefile im
erstenschritt, und dann erst main. Dann jeweils scheints zu glauben das
Target hieße main.elf.xyz mit xyz = alle möglichen source-endungen wie
.c, .o, etc.
Dann spricht es davon, "target file sizebefore.." "build" "elf" sich
vorzunehmen, aber dann nicht zu finden. sollten diese schlüsselwörter
nicht von make ersetzt werden?
Nochmal zum grundlegenden verständnis, das im Tutorial erwähnte makefile
ist Einsatzbereit?
im Anhang debug-Ausgabe.
Makefile 1:1 wie im Artikel
http://www.mikrocontroller.net/articles/Beispiel_Makefile (Beispiel 1)
Bitte poste noch einmal exakt dein Makefile, damit man damit mal
was testen kann. Bitte nicht inline, bereits copy&paste kann
Fehler verursachen, sondern als Anhang.
@ Jörg:
Nun, vermutlich ist das genau sein Makefile. ;-)
@ Moritz:
> Nochmal zum grundlegenden verständnis, das im Tutorial erwähnte makefile> ist Einsatzbereit?
Wenn deine C-Datei main.c heißt, dann ja. Heißt sie bei dir aber
anscheinend nicht, also musst du das Makefile etwas anpassen.
Stefan Ernst wrote:
> Nun, vermutlich ist das genau sein Makefile. ;-)
Ich fürchte halt, dass da in dem Makefile selbst was schief gegangen
ist. Schließlich behauptet es ja nicht, dass es irgendwelche Dateien
nicht finden würde, sondern dass es keine Regel gäbe, die main.elf
zum Ziel hat. Wenn ich mir das Makefile aus dem Download-Link im
Wiki aber nehme, dann ist diese Regel tatsächlich vorhanden, und
entsprechend verhält sich make bei seinem Aufruf auch.
Jörg Wunsch wrote:
> Wenn ich mir das Makefile aus dem Download-Link im> Wiki aber nehme, dann ist diese Regel tatsächlich vorhanden, und> entsprechend verhält sich make bei seinem Aufruf auch.
Wenn ich das Makefile aus dem Link nehme und es kein main.c gibt, kommt
genau die obige Fehlermeldung. Mit main.c funktioniert es tadellos.
Aber warum genau diese Fehlermeldung kommt, erschließt sich mir auch
gerade nicht.
Stefan Ernst wrote:
> Wenn ich das Makefile aus dem Link nehme und es kein main.c gibt, kommt> genau die obige Fehlermeldung.
Seltsam. Ich bekomme dann:
1
make: *** No rule to make target `main.c', needed by `main.o'. Stop.
Egal, ob ich das in einer Unix-Shell mache oder in der Msys-Shell
oder in cmd.exe. Einziger Unterschied, den ich so sehe: meine
makes sind alle noch 3.80, nicht 3.81.
make: *** No rule to make target `main.c', needed by `main.o'.
2
> Stop.
Ist das Directory bei dir denn "clean"? Ich bekomme deine Fehlermeldung
dann, wenn es mal ein main.c gegeben hat, und das dep-File noch
existiert.
> Egal, ob ich das in einer Unix-Shell mache oder in der Msys-Shell> oder in cmd.exe. Einziger Unterschied, den ich so sehe: meine> makes sind alle noch 3.80, nicht 3.81.
Bei mir ist es 3.81 in cmd.exe. Was anderes kann ich im Augenblick nicht
ausprobieren, da ich unterwegs bin und nichts anderes auf dem Laptop
habe.
Frisch aus meinem sample\hellow Verzeichniss. Beim ersten Post hats mir
irgendwie nur eine Datei anzuhängen erlaubt.
Die Datei heißt main.c , kleingeschrieben. Das Makefile habe ich sowohl
mit großem als auch mit kleinem M versucht.
Was heißt "clean" bezüglich Verzeichnis?
Das ganze läuft übrigens auf NTFS, ich weiß nicht ob die linux-tools
damit ein Problem haben.
Anhang: C:\winavr\sample\hellow\Makefile
Hier nochmal ein dir aus comandline, falls man mir mit main.c nicht
glauben will ;)
C:\winavr\sample\hellow>dir
Volume in Laufwerk C: hat keine Bezeichnung.
Volumeseriennummer: FCE5-47F3
Verzeichnis von C:\winavr\sample\hellow
11.11.2008 05:40 <DIR> .
11.11.2008 05:40 <DIR> ..
11.11.2008 05:40 89 hellow.pnproj
11.11.2008 05:40 59 hellow.pnps
10.11.2008 20:28 579 main.c
10.11.2008 20:30 16.838 Makefile
4 Datei(en) 17.565 Bytes
2 Verzeichnis(se), 39.128.940.544 Bytes frei
C:\winavr\sample\hellow>
Und nur falls es irgendwie Bedeutung hat... main.c:
/* Alle Zeichen zwischen Schrägstrich-Stern
und Stern-Schrägstrich sind lediglich Kommentare */
// Zeilenkommentare sind ebenfalls möglich
// alle auf die beiden Schrägstriche folgenden
// Zeichen einer Zeile sind Kommentar
#include <avr/io.h> // (1)
int main (void) { // (2)
DDRB = 0xff; // (3)
PORTB = 0x03; // (4)
while(1) { // (5a)
/* "leere" Schleife*/; // (5b)
} // (5c)
/* wird nie erreicht */
return 0; // (6)
}
Stefan Ernst wrote:
> Ist das Directory bei dir denn "clean"? Ich bekomme deine Fehlermeldung> dann, wenn es mal ein main.c gegeben hat, und das dep-File noch> existiert.
OK, hast Recht. .dep hatte ich vergessen. Wenn ich das wegräume,
sieht es aber immer noch vernünftig aus:
1
make: *** No rule to make target `main.o', needed by `main.elf'. Stop.
Ich habe mal make -p gemacht, herauskommt eine Ellenlange Liste die mir
als noob überhaupt nix sagt. Aber vielleicht gibts hier ein paar cracks
die mit einem Blick die Diagnose schaffen? Übrigens diesmal Make 3.80,
bringt aber selben Fehler.
Du benutzt ein komplett anderes Makefile als ich, das sagen mir bereits
die völlig unterschiedlichen Zeilennummern in diesem Text. Da du deins
nicht anhängst, hier nochmal das, was ich aus der Wiki-Seite habe.
Aus welchem Wiki meinst du hast du es her? Also es ist anders als jene
vom hiesigen Artikel meines ersten Posts. Was mir auf den ersten Blick
an unterschied auffällt sind die Verzeichnis Definitionen die bei meiner
Version fehlen... Aber es sollte ja trotzdem funktionieren, da ich make
im Verzeichnis des Makefiles aufrief?
Moritz wrote:
> Doch ich habs doch angehängt, 5 Posts weiter oben...
Sorry, hatte ich übersehen. Ja, das Teil ist komplett kaputt.
Beispielsweise das, was zu besagtem Fehler führt:
1
# Link: create ELF output file from object files.
2
.SECONDARY : $(TARGET).elf
3
.PRECIOUS : $(OBJ)
4
%.elf: $(OBJ)
5
@echo
6
@echo $(MSG_LINKING) $@
7
$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
Nun vergleich das mal mit dem, wie es sein sollte:
1
# Link: create ELF output file from object files.
2
.SECONDARY : $(TARGET).elf
3
.PRECIOUS : $(OBJ)
4
%.elf: $(OBJ)
5
@echo
6
@echo $(MSG_LINKING) $@
7
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
Dummerweise sind führende (hard!) TABs für ein Makefile von grund-
legender Bedeutung.
Vielleicht nimmst du ja doch einfach das mfile-Tool.
tatsache... es funktioniert! offenbar habe ich immer mit der Copy n
Paste Version vom Artikel gearbeitet, das hätte ich mir eigentlich auch
denken können. Jetzt tuts auch in PN. Danke Jörg! Sollte man vielleicht
eine Warnung für ähnlich unbedarfte im Artikel vermerken, das Copy&Paste
zu unterlassen ist?
Moritz wrote:
> Sollte man vielleicht> eine Warnung für ähnlich unbedarfte im Artikel vermerken, das Copy&Paste> zu unterlassen ist?
Nun, es ist ein Wiki, hättest du also auch gleich selbst ändern
können. Ich habe eine Bemerkung hinzu gefügt.
Ich greif den Thread hier mal auf, da ich das selbe Problem hab. Ich
finde ich hab alles richtig gemacht. Makefile mit großem M, main.c klein
geschrieben usw. main.c ist ok, das Makefile sollte auch in Ordnung
sein.
Zuerst schreibe ich, zur Sicherheit, "make clean" und dann "make all" in
di DOS-Box.
Aber irgendwie bekomme ich immer die Fehlermeldung:
1
make: *** No rule to make target 'main.elf', needed by elf. Stop.
Im Anhang ist mein Makefile. Hoffe mir kann jemand weiterhelfen.
Jörg Wunsch schrieb:> Du benutzt ein komplett anderes Makefile als ich, das sagen mir bereits> die völlig unterschiedlichen Zeilennummern in diesem Text. Da du deins> nicht anhängst, hier nochmal das, was ich aus der Wiki-Seite habe.
Dann vermutlich die 100 000senste.
Bei mir klappt das auch nicht.
Habe jetzt das Makefile von Jörg genommen, andere Fehler schon beseitigt
und den Makefile Generator von Jörg genommen.
Zunächst hatte ich auch das schon vorhandene Template genommen, zuletzt
den Anhang hier: aber immer noch "no Rule to make main.elf"
Win 8, liegt es vielleicht daran?
Order hat Vollzugriff, alle anderen Hinweise habe ich auch beachtet
(hoffe ich doch).
Aktuelle (Test) files habe ich angehängt.
Ach ja, frohes neues...
... und danke!
Die Hinweise aus dem Winavr Totorial
(http://www.mikrocontroller.net/articles/WinAVR) habe ich befolgt, auch
einige andere Sachen, die hier empfohlen wurden.
Mit dem Generator von Jörg Wunsch ist das ja eigentlich ein Kinderspiel
(vielen Dank hier noch mal an Jörg für dieses tolle Teil).
Vielleicht hängt es mit dem Windows8 zusammen.
Hab leider nur noch Win8 und meinen Laptop mit Atmel Studio muss ich
wohl erst mal in die Garantiereparatur geben. Hab dann nur noch ein
Netbook.
Stefan Ernst schrieb:> # Target file name (without extension).> TARGET = main>> # List C source files here. (C dependencies are automatically> generated.)> SRC = $(TARGET).c C/A/main.c> ^^^^^^^^^^Was soll das darstellen?
Hab ich ins Verzeichnis A gepackt. Der Doppelpunkt ist weg, weil sonst
auch Mecker von Make gab.
Der "Wunsch Generator" hat das Source mit Doppelpunkt übernommen, was
aber zu Fehler 533 führte.
F. Fo schrieb:> Hab ich ins Verzeichnis A gepackt. Der Doppelpunkt ist weg, weil sonst> auch Mecker von Make gab.
Packe es nicht irgendwo hin, sondern in den selben Ordner wie das
Makefile, und arbeite dann ohne Pfade.
Außerdem ist es ziemlich sinnlos, main.c gleich doppelt in der SRC-Liste
zu haben.
Stefan Ernst schrieb:> Packe es nicht irgendwo hin, sondern in den selben Ordner wie das> Makefile, und arbeite dann ohne Pfade.
Hallo Stefan,
vielen Dank!
Das war schon mal ein "ziemlich weiter Bringer". Sind noch Fehler, aber
ich taste mich vor.
:-)