cmd: make - no rule to make target main.elf

Gast #1043497
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)
Angehängte Dateien:
#1043600
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.
Moderator Persönliche Seite #1043606
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.
#1043634
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.
Moderator Persönliche Seite #1043643
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.
#1043680
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.
Gast #1043699
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
Angehängte Dateien:
Gast #1043705
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)
}
Moderator Persönliche Seite #1043746
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.
Gast #1043784
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.
Angehängte Dateien:
Gast #1043820
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?
Moderator Persönliche Seite #1043825
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.
Gast #1043907
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?
#1408588
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.
Angehängte Dateien:
#3466320
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!
Angehängte Dateien:
#3466355
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.
#3466390
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren