Forum: Compiler & IDEs Makefile Problem: No rule to make target


von Artur H. (hohoho)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,

ich versuche mich gerade mit der AVR QTouch Library.
Ich habe ein Beispiel-Projekt daraus für den ATmega128 genommen ( 8x8 
QMatrix Keys ) und versuche es mittels einer Makefile zu kompilieren.

Bei der QTouch Library muss man sowohl eine lib-Datei 
(libavr51g1_64qm_8x_8y_k_0rs.a), als auch eine Assembler-Datei 
(qm_asm_tiny_mega.S) einbinden.
Wenn ich die Assembler-Datei nicht einbinde, klappt das Kompilieren bis 
hin zum linken, wobei er natürlich ein paar Adressen nicht findet.
Binde ich nun die Assembler-Datei ein, kriege ich folgende Ausgabe:
1
-------- begin --------
2
avr-gcc (GCC) 4.3.5
3
Copyright (C) 2008 Free Software Foundation, Inc.
4
This is free software; see the source for copying conditions.  There is NO
5
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
6
7
make: *** No rule to make target `main.elf', needed by `elf'.  Stop.

Die Makefile habe ich aus einer WinAVR-Installation (sample-ordner) 
kopiert ( wobei das Kompilieren nun unter Ubuntu stattfindet ). Die Tabs 
sind alle intakt, daran habe ich auch nichts geändert.

Weiss Jemand, wo ich nach dem Fehler suchen muss ?

Gruß,
Artur

von Klaus W. (mfgkw)


Lesenswert?

GNU-make?

von Michel (Gast)


Lesenswert?

Hast Du die Module:

   qm_asm_tiny_mega
   BitBangSPI_Master

in deinem Ordner?

von Artur H. (hohoho)


Lesenswert?

Klaus Wachtler schrieb:
> GNU-make?

Da ich nicht genau weiss, wo der Unterschied liegt, kann ich das gerade 
schwer beantworten. Wie finde ich das denn raus ?
Aber die LUFA-Beispiel-Makefiles werden anstandlos und richtig 
behandelt.


Michel schrieb:
> Hast Du die Module:
>
>    qm_asm_tiny_mega
>    BitBangSPI_Master
>
> in deinem Ordner?

BitBangSPI_Master.c ( und .h ) befinden sich direkt im Ordner, 
qm_asm_tiny_mega liegt in dem common_files Ordner, wird durch die 
Include Dirs aber abgedeckt.
Ich habe Testweise auch mal den kompletten Pfad zu der Datei angegeben, 
der Fehler bleibt der selbe.

von Klaus W. (mfgkw)


Lesenswert?

Artur H. schrieb:
> Wie finde ich das denn raus ?

make -v

In dem Makefile sind ein paar Sachen, die ein normales Unix-make nicht 
verträgt.
Sehr wahrscheinlich hast ein GNU make, aber bevor man an der falschen 
Stelle sucht...

von Klaus W. (mfgkw)


Lesenswert?

Die Dateien sind auch alle richtig benamst (Groß-/Kleinschreibung!)?

von Artur H. (hohoho)


Lesenswert?

1
:~$ make -v
2
GNU Make 3.81
3
Copyright (C) 2006  Free Software Foundation, Inc.
4
This is free software; see the source for copying conditions.
5
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
6
PARTICULAR PURPOSE.
7
8
This program built for x86_64-pc-linux-gnu
Also offenbar ein GNU Make.

Klaus Wachtler schrieb:
> Die Dateien sind auch alle richtig benamst (Groß-/Kleinschreibung!)?

Jepp, hab mittlerweile von jeder Datei und jedem Ordner den Namen 
kopiert und im Makefile eingefügt. Hat sich immer noch nichts geändert.

von Michel (Gast)


Lesenswert?

Artur H. schrieb:
> BitBangSPI_Master.c ( und .h ) befinden sich direkt im Ordner,
> qm_asm_tiny_mega liegt in dem common_files Ordner, wird durch die
> Include Dirs aber abgedeckt.

Und wurden auch übersetzt? D.h. die Dateien:
   ./BitBangSPI_Master.o
   ./qm_asm_tiny_mega.o
existieren?

von Artur H. (hohoho)


Angehängte Dateien:

Lesenswert?

Michel schrieb:
> Und wurden auch übersetzt? D.h. die Dateien:
>    ./BitBangSPI_Master.o
>    ./qm_asm_tiny_mega.o
> existieren?

Fall 1: Wenn ich die qm_asm_tiny_mega.S aus der Makefile rausnehme, dann 
wird eine ./BitBangSPI_Master.o erstellt.
Fall 2: Wenn ich sie in der Makefile eintrage, wird überhaupt nichts 
erstellt und es kommt halt der "No rule to make target" Fehler von oben.

Also es scheint wohl mit der qm_asm_tiny_mega.S zu tun zu haben.

Ich habe nun die Zeile in der Makefile so gefasst:
1
ASRC = /home/hohoho/AVR_Projects/lib/QTouch-4_4/Generic_QTouch_Libraries/AVR_Tiny_Mega_XMega/QMatrix/common_files/qm_asm_tiny_mega.S
Das ist der komplette Pfad zu der Datei. Mittels Copy-Paste aus den 
Dateieigenschaften gewonnen.
Trotzdem gibt es dann sofort den "No rule to make target" Fehler.
Ich hänge die Datei mal an, vielleicht hilft das ein wenig weiter ( auch 
wenn ich das nach einem Blick da rein nicht glaube ).

von Michel (Gast)


Lesenswert?

Versuch mal:
make ./qm_asm_tiny_mega.o
make -d
man make

von Oliver (Gast)


Lesenswert?

Der Fehler kommt, wenn make eine der benötigten source-dateien nicht 
findet. Zumindest in deinem ganz oben gezeigte makefile ist das auch 
kein Wunder, da qm_asm_tiny_mega.S nicht im selben Verzeichnis wie das 
makefile liegt.

Warum die Variante mit vollständigem Pfad auch nicht geht, kann ich 
nicht sagen. Fehlen make vielleicht die passenden Zugriffs-Rechte, dort 
zu lesen?

Oliver

von Konrad S. (maybee)


Lesenswert?

Oliver schrieb:
> Warum die Variante mit vollständigem Pfad auch nicht geht, kann ich
> nicht sagen.

Weil
1
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
dann aufgelöst wird zu
1
OBJ = ./main.o ./BitBangSPI_Master.o ./home/hohoho/AVR_Projects/lib/QTouch-4_4/Generic_QTouch_Libraries/AVR_Tiny_Mega_XMega/QMatrix/common_files/qm_asm_tiny_mega.o

Es sollte funktionieren, wenn qm_asm_tiny_mega.S im gleichen Verzeichnis 
wie das Makefile liegt.

von Artur H. (hohoho)


Lesenswert?

Konrad S. schrieb:
> Es sollte funktionieren, wenn qm_asm_tiny_mega.S im gleichen Verzeichnis
> wie das Makefile liegt.

Jawohl, wenn ich sie ( und die .h Datei, die sie einbindet ) 
rüberkopiere, klappt es tatsächlich. Vielen Dank dafür, damit kann ich 
weiterarbeiten.

Nun ist das ja nicht gerade der Sinn einer Library, dass man so viel 
rumkopiert. Gibt es eine (einfache) Möglichkeit, das Makefile so 
abzuändern, dass die Datei qm_asm_tiny_mega.S an ihrem alten Ort 
verbleiben kann ?
Wenn nicht, ist nicht so schlimm, aber wenn schon, dann will man es ja 
richtig machen ;)

von Konrad S. (maybee)


Lesenswert?

Artur H. schrieb:
> Gibt es eine (einfache) Möglichkeit, das Makefile so
> abzuändern, dass die Datei qm_asm_tiny_mega.S an ihrem alten Ort
> verbleiben kann ?

Versuch es mal mit
1
VPATH = Verzeichnis_der_Lib1:Verzeichnis_der_Lib2:...

von Artur H. (hohoho)


Lesenswert?

Konrad S. schrieb:
> Versuch es mal mit VPATH = Verzeichnis_der_Lib1:Verzeichnis_der_Lib2:...

Wunderbar! Klappt genau so, wie ich es mir vorgestellt habe.
Dankeschön an alle, die mitgeholfen haben.

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.