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.
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.
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"
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 ;)
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.
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.
Eine eigene Frage?
Dieser Thread ist über 13 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.