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