.dep/main_elf.aps:1: *** target pattern contains no `%'. Stop.

OP #2653945
Schönen guten Abend,

ich bin Neueinsteiger und wollte mit Hilfe des STK500,WinAVR und 
AVR-Studio in die Materie einsteigen. Dafür wollte ich das 
AVR-GCC-Tutorial durchackern. Der erste Code stand und hat bereits 
funktioniert. Beim zweiten Durchlauf kam letztlich im "Programmers 
Notepad2"(WIN-AVR 20100110) diese Fehlermehldung hier:

> "make.exe" all
.dep/main_elf.aps:1: *** target pattern contains no `%'.  Stop.

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

Nach einiger Recherche habe ich herausgefunden, dass der Fehler auf die 
Angabe des Verzeichnisses im Makefile zurückzuführen ist. Hier spackt er 
wohl wegen des ":"-Zeichens in der Verzeichnisangabe rum, aber das sind 
nur wage Einschränkungen des Problems. In den meisten Foren wird nur 
gesagt, dass es daran liegt, aber nciht wie es richtig sein soll.

Kennt sich einer mit dem Fehler aus und weiß, was abzuändern ist?

Hier der wahrscheinlich relevante Teil meiner Makefile, die ich mit 
mfile erstellt habe. Falls mehr benötigt wird, liefer ich gerne mehr 
Daten.
Vielen Dank schonmal!
1
# MCU name
2
MCU = atmega8515
3

4

5
# Processor frequency.
6
#     This will define a symbol, F_CPU, in all source code files equal to the 
7
#     processor frequency. You can then use this symbol in your source code to 
8
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
9
#     automatically to create a 32-bit value in your source code.
10
#     Typical values are:
11
#         F_CPU =  1000000
12
#         F_CPU =  1843200
13
#         F_CPU =  2000000
14
#         F_CPU =  3686400
15
#         F_CPU =  4000000
16
#         F_CPU =  7372800
17
#         F_CPU =  8000000
18
#         F_CPU = 11059200
19
#         F_CPU = 14745600
20
#         F_CPU = 16000000
21
#         F_CPU = 18432000
22
#         F_CPU = 20000000
23
F_CPU = 8000000
24

25

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

29

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

33

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

39

40
# List C source files here. (C dependencies are automatically generated.)
41
SRC = $(TARGET).c
42

43

44
# List C++ source files here. (C dependencies are automatically generated.)
45
CPPSRC = 
46

47

48
# List Assembler source files here.
49
#     Make them always end in a capital .S.  Files ending in a lowercase .s
50
#     will not be considered source files but generated files (assembler
51
#     output from the compiler), and will be deleted upon "make clean"!
52
#     Even though the DOS/Win* filesystem matches both .s and .S the same,
53
#     it will preserve the spelling of the filenames, and gcc itself does
54
#     care about how the name is spelled on its command-line.
55
ASRC =
56

57

58
# Optimization level, can be [0, 1, 2, 3, s]. 
59
#     0 = turn off optimization. s = optimize for size.
60
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
61
OPT = s

Quellen:

http://www.gnu.org/savannah-checkouts/gnu/make/manual/html_node/Static-Usage.html#Static-Usage

http://fixunix.com/kernel/368943-kernel-compilation-make-halts-error-message-***-target-pattern-contains-no-%60%25.html

http://forums.devshed.com/c-programming-42/target-pattern-contains-no-174161.html

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=396363
Wenn dein Problem tatsächlich mit den Dingen zusammenhängt, die du 
vermutest, dann findet sich in deinem letzten Link ein Beispiel für das 
Problem.

Der Programmierer hat seine Sourcen im Verzeichnis

`/home/mrvn/build/grace_1:5.1.20-3/grace-5.1.20'

abgelegt. Schau dir den Pfadnamen genau an. Da ist ein ':' drinnen. Der 
: hat aber für make eine spezielle Bedeutung, da die Regeln, die er 
letztendlich abarbeitet nach dem Muster aufgebaut sind
1
Ziel: Abhaengig_von
2
      Kommando um 'Ziel' aus den Abhaengigkeiten zu erzeugen

Da kommt ebenfalls ein ':' vor und der dient dazu die Angabe des Ziels 
von den Abhängigkeiten zu trennen.

Als Programmierer, der immer wieder auf Command Line Tools angewiesen 
ist, solltest du es dir zur Regel machen, in Pfadnamen (weder bei der 
Compiler Installation noch bei deinen Projektverzeichnissen) 
irgendwelche Besonderheiten zu benutzen. Keine Umlaute, keine 
Sonderzeichen (ausser einem Unterstrich), keine Leerzeichen oder 
dergleichen. Überlass die Verwendung solcher Dinge den BWL Leuten, die 
ihre Powerpoint Präsentationen nicht mehr finden würden, wenn das 
Verzeichnis nicht
"allgemeine Ablage\streng vertraulich\Präsentationen\nur für den Chef\"
heißen kann.
Als Software Entwickler legst du auf solche Dinge keinen Wert, sondern 
sorgst lieber dafür, dass du deinen Werkzeugen möglichst wenig 
Sonderfälle präsentierst über die sie stolpern können. Und irgendein 
Command Line Tool, welches mit Umlauten nicht klar kommt, oder bei dem 
vergessen wurde beim Aufruf das Argument in " einzuschliessen so dass 
sich Leerzeichen fatal auswirken, hat man immer in der Toolchain.
OP
Vielen Dank für die schnelle Antwort.

Die Sache mit den schlecht gewählten Ordnernamen hat mir auch schon 
öfters bei python einen Strich durch die Rechnung gemacht. Ich habe es 
jetzt geändert und nun liegt meine main.c und eine neu erstellte 
Makefile in

"C:\microntroller\gccTutorial\",

Das hat das Problem jedoch nicht gelöst und der Doppelpunkt hinter dem 
Laufwerknamen lässt sich ja bei Windows nicht vermeiden ;)
In der Makefile gilt immernoch

"OBJDIR = .",

was ja letztlich dazu führt, dass sie den Sourcecode aus dem selben 
Ordner nimmt.

Mir fällt keine weitere Fehlerquelle ein. Gibt's noch eine Idee?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.