Anfänger Problem mit dem Makefile

OP #736857
Lesenswert?

Hallo,
ich habe da mal ein kleines Problem mit dem Makefile... Wahrscheinlich 
ist es ein tolles Anfängerproblem aber ich finde hier im Forum und im 
Netz auch nichts zur der Fehlermeldung.
Ich habe make all aus PN aufgerufen habe.
1
> "make.exe" all
2

3
-------- begin --------
4
avr-gcc (GCC) 4.2.2 (WinAVR 20071221)
5
Copyright (C) 2007 Free Software Foundation, Inc.
6
This is free software; see the source for copying conditions.  There is NO
7
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
8

9
make.exe: *** No rule to make target `main.elf', needed by `elf'.  Stop.
10

11
> Process Exit Code: 2
12
> Time Taken: 00:00

Habe oben mal das main.c und das makefile angefügt.
Das Makefile befindet sich im gleichen Verzeichnis wie das main.
Im Makefile habe ich noch versucht eine Sourcefile ( lcd.c  von P.Fleury 
) einzufügen die ich mit der lcd.h in der main includiert habe.

Kann mir vielleicht jemand sagen was ich da Falsch mache?
Habe sonst den ´51er in SDCC programmiert und versuche nun mit dem AVR 
warm zuwerden.

Gruß André
Angehängte Dateien:
OP #736917
Lesenswert?

Wenn ich das richtig verstanden habe muss ich die lcd.c in die makefile 
eintragen und die die lcd.h als include in die main.c. Das habe ich 
meiner Meinung nach getan.
Ich habe das noch mal versucht das ich das häkchen bei der Source File 
-Einbindung gesetzt und mal gelöscht habe. Aber hat auch nichts 
gebracht.

André
OP #736937
Lesenswert?

@stefanb:
ich habe das gerade mal versucht mit dem was du meintest. Aber bekomme 
immer noch die gleiche Meldung. Ist das denn vom Prinzip her richtig wie 
ich versuche die library von P.Fleury ein zubinden?
Wenn ich die lcd.c als Sourcefile rausnehme dann wird rum gemeckert über 
die lcd_ Funktionen.

André
Persönliche Seite #736960
Lesenswert?

Ich kann mir das mit der gleichen Meldung nicht erklären. Ich habe auch 
Probleme deinen Projektaufbau zu verstehen, d.h. wo befinden sich die 
lcd.c und die lcd.h von Peters Library bei dir?

Ich schlage vor, dass du zunächst dein Projekt in einen definierten 
Anfangszustand bringst.

1/ Kopiere main.c und Makefile in einen Backupordner.

2/ Erstelle ein neues main.c
1
int main(void)
2
{
3
  while(1);
4
}

3/ Ändere die SRC Zeile in Makefile so

SRC = $(TARGET).c

4/ Prüfe ob das fehlerfrei kompiliert wird. Wenn Fehler kommen, dann ein 
make clean machen und anschliessend ein make >& error.txt. Den Text 
error.txt bitte bei nächsten Fragen mit hochladen.

Nach dem erfolgreichen Kompilieren schlage ich vor, dass du in dem 
Verzeichnis in dem dein main.c steht einen Ordner lcdlibrary anlegst und 
alles von Peter Fleurys LCD-Library (insbes. lcd.c und lcd.h) dort 
hinein schreibst.

Dann änderst du main.c so
1
//----------------------------------------------------------------------
2
// Titel     : LCD Test
3
//----------------------------------------------------------------------
4
// Funktion  : LCD Test
5
// Schaltung : LCD an Port D 
6
//----------------------------------------------------------------------
7
// Prozessor : ATmega8/48/88/168
8
// Takt      : 3.6864 MHz
9
// Sprache   : C
10
// Datum     : 
11
// Version   : 
12
// Autor     : 
13
// Name des Programmes in der Makefile : main.c
14
//
15
//----------------------------------------------------------------------
16
#include <stdlib.h>          // Standardlib
17
#include <avr/io.h>          // IO Belegung Mega8
18
#include "lcdlibrary/lcd.h"  // LCD                <=========
19
#include <inttypes.h>        // Interger
20

21
//#define F_CPU 3686400        // Frequenz Quarz
22

23
int main (void) 
24
{
25
  lcd_init (LCD_DISP_ON_CURSOR_BLINK);
26
  lcd_clrscr();
27
  lcd_puts (" Hallo Du ");
28
  
29
  for(;;) {}
30
}

Und im Makefile die Zeile mit dem SRC so:

SRC = $(TARGET).c lcdlibrary/lcd.c
Persönliche Seite #736967
Lesenswert?

Ich habe das Projekt jetzt so aufgesetzt und erhalte folgende 
Fehlermeldungen:
1
-------- begin --------
2
avr-gcc (GCC) 4.2.2 (WinAVR 20071221)
3
Copyright (C) 2007 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

8
Compiling C: lcdlibrary/lcd.c
9
avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./lcdlibrary/lcd.lst  -std=gnu99 -Wundef -MMD -MP -MF .dep/lcd.o.d lcdlibrary/lcd.c -o lcdlibrary/lcd.o
10
lcdlibrary/lcd.c: In function 'toggle_e':
11
lcdlibrary/lcd.c:120: error: 'PORTA' undeclared (first use in this function)
12
lcdlibrary/lcd.c:120: error: (Each undeclared identifier is reported only once
13
lcdlibrary/lcd.c:120: error: for each function it appears in.)
14
lcdlibrary/lcd.c: In function 'lcd_write':
15
lcdlibrary/lcd.c:141: error: 'PORTA' undeclared (first use in this function)
16
lcdlibrary/lcd.c: In function 'lcd_read':
17
lcdlibrary/lcd.c:222: error: 'PORTA' undeclared (first use in this function)
18
lcdlibrary/lcd.c: In function 'lcd_init':
19
lcdlibrary/lcd.c:528: error: 'PORTA' undeclared (first use in this function)
20
lcdlibrary/lcd.c:596:5: warning: "KS0073_4LINES_MODE" is not defined
21
MAKE.EXE: *** [lcdlibrary/lcd.o] Error 1

D.h. main.c wird sauber übersetzt, nur das lcd.c aus Peters Library 
nicht.

Die Fehlermeldungen sind berechtigt.

Der von dir eingestellte Atmega8 hat keinen PORTA. D.h. du müsstest in 
lcd.h die Voreinstellung der Leitungszuordnung ändern und die Leitungen 
des LCD auf einen anderen Port legen (z.B. PORTC, wenn ADC nicht 
gebraucht wird).

Die Warnung "lcdlibrary/lcd.c:596:5: warning: "KS0073_4LINES_MODE" is 
not defined" ist ebenfalls eine Einstellungssache in der lcd.h, die von 
dem LCD abhängt, das du einsetzen willst.
OP #737221
Lesenswert?

@stefan
Also habe das nun mal so gemacht wie du meintest.
Die erste Main nur mit der Endlosschleife wurde ohne murren Compiliert.
Die neu aufgesetzte main hat die gleichen Fehler gemacht wie zuvor.

Wo sollte man denn am besten die lcd.c und lcd.c hin kopieren?
Habe die im Winavr/avr/include/util gehabt und auch mal versucht wenn 
die im Verzeichnis sind wo die main war. Jedesmal das makefile geändert 
aber immer den gleichen Fehler

Gruß Andre
OP #737445
Lesenswert?

@ stefb:
Danke für den Anhang. Der funktioniert bei mir komischerweise.

Dieses main.c wird ohne Fehler compeliert
1
int main(void)
2
{
3
  while(1);
4
}

Dieses main.c wurde zu erst mit Fehler compiliert ( wie im ersten 
Beitrag )
Habe dann Winavr deinstalliert. Nach der Neuinstallation ging es ohne 
Fehler !?!?
1
//----------------------------------------------------------------------
2
// Titel     : LCD Test
3
//----------------------------------------------------------------------
4
// Funktion  : LCD Test
5
// Schaltung : LCD an Port D 
6
//----------------------------------------------------------------------
7
// Prozessor : ATmega8/48/88/168
8
// Takt      : 3.6864 MHz
9
// Sprache   : C
10
// Datum     : 
11
// Version   : 
12
// Autor     : 
13
// Name des Programmes in der Makefile : main.c
14
//
15
//----------------------------------------------------------------------
16
#include <stdlib.h>          // Standardlib
17
#include <avr/io.h>          // IO Belegung Mega8
18
#include "lcdlibrary/lcd.h"  // LCD                <=========
19
#include <inttypes.h>        // Interger
20

21
//#define F_CPU 3686400        // Frequenz Quarz
22

23
int main (void) 
24
{
25
  lcd_init (LCD_DISP_ON_CURSOR_BLINK);
26
  lcd_clrscr();
27
  lcd_puts (" Hallo Du ");
28
  
29
  for(;;) {}
30
}


Müssen die Librarys die man zu seinem Programm braucht in dem gleichen 
Verzeichnis oder in einem Unterverzeichnis sein in dem man auch sein 
main.c hat?

André
OP #737475
Lesenswert?

Herr Gott schei....

Ich glaube ich weiß woran es lag...
Mein Projektverzeichnis hieß ...\eigene Programme\..
Scheinbar darf man keine Leerzeichen in den Verzeichnisnamen haben die 
man mit WinAVR und makefile verwendet. Nachdem ich den Namen geändert 
habe ( ohne Leerzeichen) ging das Compilieren ohne Probleme.
Makefile mag wohl keine Leerzeichen...

Danke für die Hilfe

Gruß André
Persönliche Seite #737481
Lesenswert?

Andre H. wrote:
> Müssen die Librarys die man zu seinem Programm braucht in dem gleichen
> Verzeichnis oder in einem Unterverzeichnis sein in dem man auch sein
> main.c hat?

Nein das ist nicht notwendig.

Grundsätzlich kannst du beim Include relative Pfade (lcdlibrary/lcd.h 
oder ../../irgendwo/lcd.h) angeben und auch absolute Pfade (i:\lcd.h).

Diese Pfade müssen aber in "" eingeschlossen werden. Das Einschliessen 
in <> Hängt ja den Pfad an den WiNAVR Installationspfad (bzw. dessen 
Includepfad) an.

In diesem Projekt macht es Sinn mindestens lcd.h als Kopie in der Nähe 
von main.c zu haben und nicht in dem allgemeinen Includeverzeichnis oder 
in einem gemeinsamen LCD-Library Verzeichnis für alle deine Projekte.

Du änderst ja in lcd.h die konkrete Leitungszuordnung und ggf. weiteres 
und das sollte eben beim Projekt sein/bleiben. Die Änderungen sollen ja 
nicht beim nächsten Projekt durch die dort notwendigen Änderungen alte 
Projekte zerfetzen.

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