Forum: Compiler & IDEs cmd: make - no rule to make target main.elf


von Moritz (Gast)


Angehängte Dateien:

Lesenswert?

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)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Stefan E. (sternst)


Lesenswert?

@ 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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Stefan E. (sternst)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Stefan E. (sternst)


Lesenswert?

Jörg Wunsch wrote:

> Seltsam.  Ich bekomme dann:
>
>
1
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.

von Moritz (Gast)


Angehängte Dateien:

Lesenswert?

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

von Moritz (Gast)


Lesenswert?

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)
}

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Moritz (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

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.

von Moritz (Gast)


Lesenswert?

Doch ich habs doch angehängt, 5 Posts weiter oben...

von Moritz (Gast)


Lesenswert?

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?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Moritz (Gast)


Lesenswert?

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?

von Moritz (Gast)


Lesenswert?

(wenn man stattdessen den Link benutzt mit speichern unter kommt das 
saubere Makefile an)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Moritz (Gast)


Lesenswert?

Werde ich nächstes mal machen, danke nochmal für deine Hilfe!

von Christian F. (funke)


Angehängte Dateien:

Lesenswert?

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.

von Christian F. (funke)


Lesenswert?

Hm, hat sich erledigt. Die Hektik war mein Feind. Hab im Makefile 
STK500v2 angegeben anstatt STK500. Jetzt läufts. Trotzdem danke

von F. F. (foldi)


Angehängte Dateien:

Lesenswert?

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!

von F. F. (foldi)


Lesenswert?

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.

von Stefan E. (sternst)


Lesenswert?

1
# Target file name (without extension).
2
TARGET = main
3
4
5
# List C source files here. (C dependencies are automatically generated.)
6
SRC = $(TARGET).c  C/A/main.c
7
                   ^^^^^^^^^^
Was soll das darstellen?

von F. F. (foldi)


Lesenswert?

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.

: Bearbeitet durch User
von F. F. (foldi)


Lesenswert?

Vermute schon fast, dass es am Win8 liegt. Den Ordner habe ich, weil ich 
schon etwas in dieser Richtung las, mit Vollzugriff an "jeder" frei 
gegeben.

von Stefan E. (sternst)


Lesenswert?

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.

von F. F. (foldi)


Lesenswert?

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.
:-)

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.