Forum: Compiler & IDEs Kompilieren unter Linux


von Robert S. (razer) Benutzerseite


Lesenswert?

Hallo an alle,

Seit ein paar Tagen hab ich Kubuntu 7.04 Feisty Fawn am Laptop laufen :)
Natürlich hab ich sofort den avrgcc installiert.

Wenn ich kedoch ein vorhandenes Projekt kompilieren möchte, bekomm ich 
immer eine Fehlermeldung:
1
root@robert-laptop:/media/sdb8/1_LEDBlink# make
2
.dep/led_blink.o.d:1: *** Mehrfache Target-Muster.  Schluss.

Weiß jemand woran das liegen könnte?

Danke im Voraus
Gruß Robert

von tom (Gast)


Lesenswert?

Hi,

schau Dir mal Dein Makefile an, der avrgcc ist's nicht, der Make 
beschwert sich!

Schönen Tag noch,
Thomas

von Robert S. (razer) Benutzerseite


Lesenswert?

Hallo Thomas

Hier ist mein Makefile. Ich hoffe du kannst mir helfen.
1
# Hey Emacs, this is a -*- makefile -*-
2
#----------------------------------------------------------------------------
3
# WinAVR Makefile Template written by Eric B. Weddington, J�rg Wunsch, et al.
4
#
5
# Released to the Public Domain
6
#
7
# Additional material for this makefile was written by:
8
# Peter Fleury
9
# Tim Henigan
10
# Colin O'Flynn
11
# Reiner Patommel
12
# Markus Pfaff
13
# Sander Pool
14
# Frederik Rouleau
15
#
16
#----------------------------------------------------------------------------
17
# On command line:
18
#
19
# make all = Make software.
20
#
21
# make clean = Clean out built project files.
22
#
23
# make coff = Convert ELF to AVR COFF.
24
#
25
# make extcoff = Convert ELF to AVR Extended COFF.
26
#
27
# make program = Download the hex file to the device, using avrdude.
28
#                Please customize the avrdude settings below first!
29
#
30
# make debug = Start either simulavr or avarice as specified for debugging, 
31
#              with avr-gdb or avr-insight as the front end for debugging.
32
#
33
# make filename.s = Just compile filename.c into the assembler code only.
34
#
35
# make filename.i = Create a preprocessed source file for use in submitting
36
#                   bug reports to the GCC project.
37
#
38
# To rebuild project do "make clean" then "make all".
39
#----------------------------------------------------------------------------
40
41
42
# MCU name
43
MCU = atmega8
44
45
46
# Processor frequency.
47
#     This will define a symbol, F_CPU, in all source code files equal to the 
48
#     processor frequency. You can then use this symbol in your source code to 
49
#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
50
#     automatically to create a 32-bit value in your source code.
51
F_CPU = 8000000
52
53
54
# Output format. (can be srec, ihex, binary)
55
FORMAT = ihex
56
57
58
# Target file name (without extension).
59
TARGET = led_blink
60
61
62
# List C source files here. (C dependencies are automatically generated.)
63
SRC = $(TARGET).c
64
65
66
# List Assembler source files here.
67
#     Make them always end in a capital .S.  Files ending in a lowercase .s
68
#     will not be considered source files but generated files (assembler
69
#     output from the compiler), and will be deleted upon "make clean"!
70
#     Even though the DOS/Win* filesystem matches both .s and .S the same,
71
#     it will preserve the spelling of the filenames, and gcc itself does
72
#     care about how the name is spelled on its command-line.
73
ASRC = 
74
75
76
# Optimization level, can be [0, 1, 2, 3, s]. 
77
#     0 = turn off optimization. s = optimize for size.
78
#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
79
OPT = s
80
81
82
# Debugging format.
83
#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
84
#     AVR Studio 4.10 requires dwarf-2.
85
#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
86
DEBUG = stabs
87
88
89
# List any extra directories to look for include files here.
90
#     Each directory must be seperated by a space.
91
#     Use forward slashes for directory separators.
92
#     For a directory that has spaces, enclose it in quotes.
93
# EXTRAINCDIRS = f:/Programme/AVRlib
94
95
96
# Compiler flag to set the C Standard level.
97
#     c89   = "ANSI" C
98
#     gnu89 = c89 plus GCC extensions
99
#     c99   = ISO C99 standard (not yet fully implemented)
100
#     gnu99 = c99 plus GCC extensions
101
CSTANDARD = -std=gnu99
102
103
104
# Place -D or -U options here
105
CDEFS = -DF_CPU=$(F_CPU)UL
106
107
108
# Place -I options here
109
CINCS =
110
111
112
113
#---------------- Compiler Options ----------------
114
#  -g*:          generate debugging information
115
#  -O*:          optimization level
116
#  -f...:        tuning, see GCC manual and avr-libc documentation
117
#  -Wall...:     warning level
118
#  -Wa,...:      tell GCC to pass this to the assembler.
119
#    -adhlns...: create assembler listing
120
CFLAGS = -g$(DEBUG)
121
CFLAGS += $(CDEFS) $(CINCS)
122
CFLAGS += -O$(OPT)
123
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
124
CFLAGS += -Wall -Wstrict-prototypes
125
CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
126
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
127
CFLAGS += $(CSTANDARD)
128
129
130
#---------------- Assembler Options ----------------
131
#  -Wa,...:   tell GCC to pass this to the assembler.
132
#  -ahlms:    create listing
133
#  -gstabs:   have the assembler create line number information; note that
134
#             for use in COFF files, additional information about filenames
135
#             and function names needs to be present in the assembler source
136
#             files -- see avr-libc docs [FIXME: not yet described there]
137
#  -listing-cont-lines: Sets the maximum number of continuation lines of hex 
138
#       dump that will be displayed for a given single line of source input.
139
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs,--listing-cont-lines=100
140
141
142
#---------------- Library Options ----------------
143
# Minimalistic printf version
144
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
145
146
# Floating point printf version (requires MATH_LIB = -lm below)
147
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
148
149
# If this is left blank, then it will use the Standard printf version.
150
PRINTF_LIB = 
151
#PRINTF_LIB = $(PRINTF_LIB_MIN)
152
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
153
154
155
# Minimalistic scanf version
156
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
157
158
# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
159
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
160
161
# If this is left blank, then it will use the Standard scanf version.
162
SCANF_LIB = 
163
#SCANF_LIB = $(SCANF_LIB_MIN)
164
#SCANF_LIB = $(SCANF_LIB_FLOAT)
165
166
167
MATH_LIB = -lm
168
169
170
171
#---------------- External Memory Options ----------------
172
173
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
174
# used for variables (.data/.bss) and heap (malloc()).
175
#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
176
177
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
178
# only used for heap (malloc()).
179
#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
180
181
EXTMEMOPTS =
182
183
184
185
#---------------- Linker Options ----------------
186
#  -Wl,...:     tell GCC to pass this to linker.
187
#    -Map:      create map file
188
#    --cref:    add cross reference to  map file
189
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
190
LDFLAGS += $(EXTMEMOPTS)
191
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
192
193
194
195
#---------------- Programming Options (avrdude) ----------------
196
197
# Programming hardware: alf avr910 avrisp bascom bsd 
198
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
199
#
200
# Type: avrdude -c ?
201
# to get a full listing.
202
#
203
AVRDUDE_PROGRAMMER = stk200
204
205
# com1 = serial port. Use lpt1 to connect to parallel port.
206
AVRDUDE_PORT = lpt1    # programmer connected to serial device
207
208
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
209
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
210
211
212
# Uncomment the following if you want avrdude's erase cycle counter.
213
# Note that this counter needs to be initialized first using -Yn,
214
# see avrdude manual.
215
#AVRDUDE_ERASE_COUNTER = -y
216
217
# Uncomment the following if you do /not/ wish a verification to be
218
# performed after programming the device.
219
#AVRDUDE_NO_VERIFY = -V
220
221
# Increase verbosity level.  Please use this when submitting bug
222
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
223
# to submit bug reports.
224
#AVRDUDE_VERBOSE = -v -v
225
226
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
227
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
228
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
229
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
230
231
232
233
#---------------- Debugging Options ----------------
234
235
# For simulavr only - target MCU frequency.
236
DEBUG_MFREQ = $(F_CPU)
237
238
# Set the DEBUG_UI to either gdb or insight.
239
# DEBUG_UI = gdb
240
DEBUG_UI = insight
241
242
# Set the debugging back-end to either avarice, simulavr.
243
DEBUG_BACKEND = avarice
244
#DEBUG_BACKEND = simulavr
245
246
# GDB Init Filename.
247
GDBINIT_FILE = __avr_gdbinit
248
249
# When using avarice settings for the JTAG
250
JTAG_DEV = /dev/com1
251
252
# Debugging port used to communicate between GDB / avarice / simulavr.
253
DEBUG_PORT = 4242
254
255
# Debugging host used to communicate between GDB / avarice / simulavr, normally
256
#     just set to localhost unless doing some sort of crazy debugging when 
257
#     avarice is running on a different computer.
258
DEBUG_HOST = localhost
259
260
261
262
#============================================================================
263
264
265
# Define programs and commands.
266
SHELL = sh
267
CC = avr-gcc
268
OBJCOPY = avr-objcopy
269
OBJDUMP = avr-objdump
270
SIZE = avr-size
271
NM = avr-nm
272
AVRDUDE = avrdude
273
REMOVE = rm -f
274
COPY = cp
275
WINSHELL = cmd
276
277
278
# Define Messages
279
# English
280
MSG_ERRORS_NONE = Errors: none
281
MSG_BEGIN = -------- begin --------
282
MSG_END = --------  end  --------
283
MSG_SIZE_BEFORE = Size before: 
284
MSG_SIZE_AFTER = Size after:
285
MSG_COFF = Converting to AVR COFF:
286
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
287
MSG_FLASH = Creating load file for Flash:
288
MSG_EEPROM = Creating load file for EEPROM:
289
MSG_EXTENDED_LISTING = Creating Extended Listing:
290
MSG_SYMBOL_TABLE = Creating Symbol Table:
291
MSG_LINKING = Linking:
292
MSG_COMPILING = Compiling:
293
MSG_ASSEMBLING = Assembling:
294
MSG_CLEANING = Cleaning project:
295
296
297
298
299
# Define all object files.
300
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
301
302
# Define all listing files.
303
LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
304
305
306
# Compiler flags to generate dependency files.
307
GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
308
309
310
# Combine all necessary flags and optional flags.
311
# Add target processor to flags.
312
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
313
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
314
315
316
317
318
319
# Default target.
320
all: begin gccversion sizebefore build sizeafter end
321
322
build: elf hex eep lss sym extcoff
323
324
elf: $(TARGET).elf
325
hex: $(TARGET).hex
326
eep: $(TARGET).eep
327
lss: $(TARGET).lss 
328
sym: $(TARGET).sym
329
330
331
332
# Eye candy.
333
# AVR Studio 3.x does not check make's exit code but relies on
334
# the following magic strings to be generated by the compile job.
335
begin:
336
  @echo
337
  @echo $(MSG_BEGIN)
338
339
end:
340
  @echo $(MSG_END)
341
  @echo
342
343
344
# Display size of file.
345
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
346
ELFSIZE = $(SIZE) $(TARGET).elf
347
348
sizebefore:
349
  @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
350
  2>/dev/null; echo; fi
351
352
sizeafter:
353
  @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
354
  2>/dev/null; echo; fi
355
356
357
358
# Display compiler version information.
359
gccversion : 
360
  @$(CC) --version
361
362
363
364
# Program the device.  
365
program: $(TARGET).hex $(TARGET).eep
366
  $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
367
368
369
# Generate avr-gdb config/init file which does the following:
370
#     define the reset signal, load the target file, connect to target, and set 
371
#     a breakpoint at main().
372
gdb-config: 
373
  @$(REMOVE) $(GDBINIT_FILE)
374
  @echo define reset >> $(GDBINIT_FILE)
375
  @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
376
  @echo end >> $(GDBINIT_FILE)
377
  @echo file $(TARGET).elf >> $(GDBINIT_FILE)
378
  @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
379
ifeq ($(DEBUG_BACKEND),simulavr)
380
  @echo load  >> $(GDBINIT_FILE)
381
endif  
382
  @echo break main >> $(GDBINIT_FILE)
383
384
debug: gdb-config $(TARGET).elf
385
ifeq ($(DEBUG_BACKEND), avarice)
386
  @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
387
  @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
388
  $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
389
  @$(WINSHELL) /c pause
390
else
391
  @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
392
  $(DEBUG_MFREQ) --port $(DEBUG_PORT)
393
endif
394
  @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
395
396
397
398
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
399
COFFCONVERT=$(OBJCOPY) --debugging \
400
--change-section-address .data-0x800000 \
401
--change-section-address .bss-0x800000 \
402
--change-section-address .noinit-0x800000 \
403
--change-section-address .eeprom-0x810000 
404
405
406
coff: $(TARGET).elf
407
  @echo
408
  @echo $(MSG_COFF) $(TARGET).cof
409
  $(COFFCONVERT) -O coff-avr $< $(TARGET).cof
410
411
412
extcoff: $(TARGET).elf
413
  @echo
414
  @echo $(MSG_EXTENDED_COFF) $(TARGET).cof
415
  $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
416
417
418
419
# Create final output files (.hex, .eep) from ELF output file.
420
%.hex: %.elf
421
  @echo
422
  @echo $(MSG_FLASH) $@
423
  $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
424
425
%.eep: %.elf
426
  @echo
427
  @echo $(MSG_EEPROM) $@
428
  -$(OBJCOPY) -j .eeprom --set-section-flags .eeprom=alloc,load \
429
  --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
430
431
# Create extended listing file from ELF output file.
432
%.lss: %.elf
433
  @echo
434
  @echo $(MSG_EXTENDED_LISTING) $@
435
  $(OBJDUMP) -h -S $< > $@
436
437
# Create a symbol table from ELF output file.
438
%.sym: %.elf
439
  @echo
440
  @echo $(MSG_SYMBOL_TABLE) $@
441
  $(NM) -n $< > $@
442
443
444
445
# Link: create ELF output file from object files.
446
.SECONDARY : $(TARGET).elf
447
.PRECIOUS : $(OBJ)
448
%.elf: $(OBJ)
449
  @echo
450
  @echo $(MSG_LINKING) $@
451
  $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
452
453
454
# Compile: create object files from C source files.
455
%.o : %.c
456
  @echo
457
  @echo $(MSG_COMPILING) $<
458
  $(CC) -c $(ALL_CFLAGS) $< -o $@ 
459
460
461
# Compile: create assembler files from C source files.
462
%.s : %.c
463
  $(CC) -S $(ALL_CFLAGS) $< -o $@
464
465
466
# Assemble: create object files from assembler source files.
467
%.o : %.S
468
  @echo
469
  @echo $(MSG_ASSEMBLING) $<
470
  $(CC) -c $(ALL_ASFLAGS) $< -o $@
471
472
# Create preprocessed source for use in sending a bug report.
473
%.i : %.c
474
  $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
475
476
477
# Target: clean project.
478
clean: begin clean_list end
479
480
clean_list :
481
  @echo
482
  @echo $(MSG_CLEANING)
483
  $(REMOVE) $(TARGET).hex
484
  $(REMOVE) $(TARGET).eep
485
  $(REMOVE) $(TARGET).cof
486
  $(REMOVE) $(TARGET).elf
487
  $(REMOVE) $(TARGET).map
488
  $(REMOVE) $(TARGET).sym
489
  $(REMOVE) $(TARGET).lss
490
  $(REMOVE) $(OBJ)
491
  $(REMOVE) $(LST)
492
  $(REMOVE) $(SRC:.c=.s)
493
  $(REMOVE) $(SRC:.c=.d)
494
  $(REMOVE) .dep/*
495
496
497
498
# Include the dependency files.
499
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
500
501
502
# Listing of phony targets.
503
.PHONY : all begin finish end sizebefore sizeafter gccversion \
504
build elf hex eep lss sym coff extcoff \
505
clean clean_list program debug gdb-config

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


Lesenswert?

Hast du den gesamten Verzeichnisinhalt aus einem Windows kopiert?
Dann hast du dir Doppelpunkte von den Laufwerksbuchstaben in den
Dateien unterhalb .dep eingehandelt.

Lösche das gesamte Verzeichnis .dep.

von Robert S. (razer) Benutzerseite


Lesenswert?

Ja das Verzeichnis kommt aus Windows. Jedoch hab ich das bereits 
gelöscht.
Im Verzeichnis befindet sich nur die eine C File und das Makefile.

Gruß Robert

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


Lesenswert?

Nur nochmal zur Sicherheit: du hast ein
1
rm -rf .dep

in diesem Verzeichnis ausgeführt?

Er beschwert sich nämlich über eine der Dateien, die in .dep
herumliegen.  Beachte, dass du mit einem einfachen ls-Kommando
das Verzeichnis .dep nicht siehst, dafür musst du »ls -A«
eingeben.

von Robert S. (razer) Benutzerseite


Lesenswert?

Danke Jörg, das war es :)

von Malte _. (malte) Benutzerseite


Lesenswert?

Robert Schilling wrote:

>
1
> root@robert-laptop:/media/sdb8/1_LEDBlink# make
2
> .dep/led_blink.o.d:1: *** Mehrfache Target-Muster.  Schluss.
3
>

Du musst nicht root sein um zu compiliern :-)

von Robert S. (razer) Benutzerseite


Lesenswert?

Ich hab noch vorm kompilieren ein Programm gestartet, das Root Rechte 
braucht ;)

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.