Forum: Compiler & IDEs Sourcefiles in extra Verzeichnis? *** multiple target patterns.


von Axel R. (Gast)


Lesenswert?

Hallo,
Ich habe versucht, alle Quelldateien ( LCD, USART, Schrift-und 
Zeichensätze, ADC usw. ) die ich für verschiedene Projekte brauchen 
werde, in ein Unterverzeichnis auszulagern:
Also alle nur einmal benötigten Funktionen nach C:\Daten_AR\ kopiert und 
versucht, ins makefile einbauen: und? Nichts geht :(

> "make.exe" all
makefile:545: *** multiple target patterns.  Stop.

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

Ich kann zwar etwas englisch und denke, er hat für eine Sache, die er 
machen muss, zwei verschiedene Verzeichnisse bekommen. Evtl. eine 
Diskrepanz zwischen absoluten und relativen Pfad?


/*####  Makefile #####*/

# Output format. (can be srec, ihex, binary)
FORMAT = ihex


# Target file name (without extension).
TARGET = main


# Object files directory
#     To put object files in current directory, use a dot (.), do NOT 
make
#     this an empty or blank macro!
OBJDIR = .


# temporär auskommentiert
# List C source files here. (C dependencies are automatically 
generated.)
# SRC = $(TARGET).c ml5x_adc.c dds.c serial.c
# SRC += dogm-graphic.c font.c
# SRC += Fonts/font_proportional_16px.c
# SRC += Fonts/font_proportional_8px.c

# neu eingebastelt
SRC = $(TARGET).c
SRC += C:/Dateien_AR/AVR_GCC/ml5x_adc.c
SRC += C:/Dateien_AR/AVR_GCC/dds.c
SRC += C:/Dateien_AR/AVR_GCC/serial.c
SRC += C:/Dateien_AR/AVR_GCC/dogm-graphic.c
SRC += C:/Dateien_AR/AVR_GCC/font.c
SRC += C:/Dateien_AR/AVR_GCC/Fonts/font_proportional_16px.c
SRC += C:/Dateien_AR/AVR_GCC/Fonts/font_proportional_8px.c


/*############# FEHLERMELDUNG ##############*/

> "make.exe" all
makefile:545: *** multiple target patterns.  Stop.

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

/*##########makefile um zeile 540 herum########*/

## Create library from object files.
.SECONDARY : $(TARGET).a
.PRECIOUS : $(OBJ)  <--- hier ist die Zeile
%.a: $(OBJ)
@echo
@echo $(MSG_CREATING_LIBRARY) $@
$(AR) $@ $(OBJ)


Jedenfalls geht’s nicht – war klar, oder?

Ich würde mich freuen, wenn mir jemand sagen kann, wie ich die 
Pfadangaben deklarieren muss, damit es am Ende funktioinert.

Dankeschön

Axelr.

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


Lesenswert?

Vermutung: du benutzt ein "make.exe", welches mit den C: in deinen
Pfadnamen nicht klarkommt.  Es wertet diese als "target pattern", also
sowas wie in:
1
all: hexfile

von Axel R. (Gast)


Lesenswert?

Komme leider erst jetzt dazu, zu antworten. sry.
1
# List C source files here. (C dependencies are automatically generated.)
2
# SRC = $(TARGET).c ml5x_adc.c dds.c serial.c
3
# SRC += dogm-graphic.c font.c
4
# SRC += Fonts/font_proportional_16px.c
5
# SRC += Fonts/font_proportional_8px.c
6
# SRC += Fonts/digits_32px.c
7
SRC = $(TARGET).c 
8
SRC += ..//C/Dateien_AR/AVR_GCC/ml5x_adc.c
9
SRC += ..//C/Dateien_AR/AVR_GCC/dds.c
10
SRC += ..//C/Dateien_AR/AVR_GCC/serial.c
11
SRC += ..//C/Dateien_AR/AVR_GCC/dogm-graphic.c
12
SRC += ..//C/Dateien_AR/AVR_GCC/font.c
13
SRC += ..//C/Dateien_AR/AVR_GCC/Fonts/font_proportional_16px.c
14
SRC += ..//C/Dateien_AR/AVR_GCC/Fonts/font_proportional_8px.c
15
SRC += ..//C/Dateien_AR/AVR_GCC/Fonts/ Fonts/digits_32px.c
Achso, es ist der aktuelle AVR-gcc und ich habe einen ATMega168A in 
Verwendung ;)
Ich habe testhalber im AVR Studio einfach mal ein Projekt erzeugt um zu 
sehen, wie das dort gehandthabt wird und habe dort meine Quelldateien 
von "C:\Dateien_AR" usw. manuell einem Projekt hinzugefügt.
ich weiss zwar im Moment nicht, wo jetzt hier das makefile abgelegt ist, 
aber die Fehlermeldung sagt:
1
make: *** No rule to make target `..//C/Dateien_AR/AVR_GCC/dogm-graphic.c', needed by `dogm-graphic.o'.  Stop.

Also habe ich meinen Pfad im "richtigen" Projekt jetzt entsprechend 
angepasst und alle
"C:/Dateien_AR/AVR_GCC/"
durch
..//C/Dateien_AR/AVR_GCC/
ersetzt.

Nun gibt es zwar keine Verwirrung bzgl. den Doppelpunkten aber er hat 
jetzt keine Regel, um Main zu erstellen. :(
1
 "make.exe" all
2
3
-------- begin --------
4
avr-gcc (WinAVR 20100110) 4.3.3
5
Copyright (C) 2008 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

Verwende ich die obenstehenden, auskommentierten Anweisungen,
1
# SRC = $(TARGET).c ml5x_adc.c dds.c serial.c
2
# SRC += dogm-graphic.c font.c
3
# SRC += Fonts/font_proportional_16px.c
4
# SRC += Fonts/font_proportional_8px.c
5
# SRC += Fonts/digits_32px.c
funktioniert alles.

Viele Grüße und Danke für den Tip mit den Doppelpunkten ;)
Axelr.

von leluno (Gast)


Lesenswert?

wenn du beim include den Pfad angibst, geht das ohne Probleme:

#include <stdio.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include "C:\WinAVRkk\kklibx\defines.h"
#include "C:\WinAVRkk\kklibx\colors.h"

von Axel R. (Gast)


Lesenswert?

Danke, das habe ich in der "main.c" heute früh ergänzt ( fiel mir auf 
dem Weg zur Arbeit auch ein ).
1
..
2
..
3
#include <avr/pgmspace.h>
4
#include <util/delay.h>
5
#include "C:/Dateien_AR/AVR_GCC/pinbelegung.h"
6
#include "C:/Dateien_AR/AVR_GCC/ml5x_adc.h"
7
#include "C:/Dateien_AR/AVR_GCC/DDS.h"
8
#include "C:/Dateien_AR/AVR_GCC/dogm-graphic.h"
9
#include "C:/Dateien_AR/AVR_GCC/font.h"
10
#include "C:/Dateien_AR/AVR_GCC/serial.h"
11
..
12
..

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


Lesenswert?

Axel R. schrieb:
> Danke, das habe ich in der "main.c" heute früh ergänzt ( fiel mir auf
> dem Weg zur Arbeit auch ein ).
>
1
> ..
2
> ..
3
> #include <avr/pgmspace.h>
4
> #include <util/delay.h>
5
> #include "C:/Dateien_AR/AVR_GCC/pinbelegung.h"
6
> #include "C:/Dateien_AR/AVR_GCC/ml5x_adc.h"
7
> #include "C:/Dateien_AR/AVR_GCC/DDS.h"
8
> #include "C:/Dateien_AR/AVR_GCC/dogm-graphic.h"
9
> #include "C:/Dateien_AR/AVR_GCC/font.h"
10
> #include "C:/Dateien_AR/AVR_GCC/serial.h"
11
> ..
12
> ..
13
>

Es sollte doch aber auch mit -I gehen:
1
#include "pinbelegung.h"

...
1
CFLAGS += -I"C:/Dateien_AR/AVR_GCC"

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Man nimmt doch keine absoluten Pfade als Include-Path!

Stattdessen:
1
#include "pinbelegung.h"

nebst
1
-I c:/Dateien_AR/AVR_GCC
o.ä. als Compileroption.

von Axel R. (Gast)


Lesenswert?

Johann L. schrieb:
> Man nimmt doch keine absoluten Pfade als Include-Path!
>
> Stattdessen:
>
>
1
#include "pinbelegung.h"
>
> nebst
1
-I c:/Dateien_AR/AVR_GCC
o.ä. als Compileroption.

Kam mir selbst komisch vor :)
Habe ich bei anderen Projekten auch noch nie gesehen, das dort absolute 
Pfadangaben in den Quelldateien standen.

Bei den Compileroptionen dann auf der Kommandozeile, im makefile dann 
NCIHT mehr mit "C:/xyz", sondern mit.."//C/xyz" weil er ja sonst mt den 
Doppelpunkten durcheinander kommt.

Muss ich mir genau ansehen, wo ich welche Option plaziere, damit das 
compiliert wird. Muss man einfach hintersteigen... spannende Sache ;)

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Eventuell brauchts auch nur ein paar Anführungszeichen um die 
Pfadangaben?

von Axel R. (Gast)


Lesenswert?

Danke, hatte ich probiert. Multiple Pattern Gab es als Antwort.

von Axel R. (Gast)


Lesenswert?

Sonst kopier ich mir in die winavr Installation irgendwo mit rein. Aber 
das muss doch so gehen. Ich muss dich meinen kompletten Kram irgendwo 
lassen können, ohne das jedesmal mit ins Projekt kopieren zu müssen.

von Axel R. (Gast)


Lesenswert?

Dich -> doch. Iphone

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Also mit meinem[tm] make unter Windos funktionieren folgende 3 
Varianten:
1
-I c:/foo
2
-I c:\foo
3
-I c:\\foo

Dein Problem is woanners.

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


Lesenswert?

Axel R. schrieb:
> Bei den Compileroptionen dann auf der Kommandozeile, im makefile dann
> NCIHT mehr mit "C:/xyz", sondern mit.."//C/xyz" weil er ja sonst mt den
> Doppelpunkten durcheinander kommt.

In einer Variablenzuweisung ist der Doppelpunkt nie ein Problem.
Nur bei sowas wie:
1
C:/foo/bar:
2
      # Kommandos, um C:/foo/bar herzustellen
3
4
C:/foo/mumble:
5
      # Kommandos für C:/foo/mumble

würde make zur Meinung gelangen, hier zwei Regeln für das Ziel "C:"
vorliegen zu haben.

Andererseits bin ich ohnehin der Meinung, dass ausdrücklich für
Windows compilierte make-Versionen (bspw. die, die bei WinAVR mit
ausgeliefert wird) diese Situation ordentlich erfassen und damit
umgehen können.  Ich bin aber zugegebenermaßen alles andere als
ein Äggsberde für Windows.

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.