Sourcefiles in extra Verzeichnis? *** multiple target patterns.

Gast #3337424
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.
Gast #3340564
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.
Gast #3340714
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"
Gast #3340767
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
..
Moderator Persönliche Seite #3340786
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"
Gast #3340820
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 ;)
Gast #3341064
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.
Moderator Persönliche Seite #3341284
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.

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