Forum: Compiler & IDEs GCC makefile Problem


von TestX .. (xaos)


Angehängte Dateien:

Lesenswert?

hi,

ich brauche mal eure Hilfe. Atm fange ich gerade mit ARM Controllern an 
zu arbeiten (emf32). Bevor ich nur einen etwas teureren Compiler kaufe 
wollte ich das ganze mal mit dem GCC Probieren.
Nach längerem probieren hats auch irgendwann geklappt die Toolchain 
unter Debian zu bauen (gcc-4.4.0, binutils-2.20.1, newlib-1.13.0)

Ich benutze unter Windows das GNUARM Eclipse Plugin. Als Toolchain ist 
"ARM Linux GCC (GNUARM)" und als Builder "ARM Linux GNU make Builder" 
ausgewählt.

Wenn ich das makefile generieren lasse und das Projekt auf den Linux 
Server zum compilieren raufschiebe bekomme ich folgende Fehlermeldung 
sobald ich im Verzeichnis /Release "make all" ausführe.
1
make: *** No rule to make target `ARMEMF32.elf', needed by `all'.  Stop.

Ich habe nicht wirklich viel Ahnung von makefiles und will mich da auch 
eigtl nicht weiter drum kümmern müssen (dann kann ich gleich ein Bash 
Script schreiben..). Hat jemand von euch eine Idee woran das liegen kann 
? Anbei das Automatisch generierte Makefile

Danke !

von TestX .. (xaos)


Angehängte Dateien:

Lesenswert?

anbei mal das makefile als txt, damit mans im forum öffnen kann..

von hp-freund (Gast)


Lesenswert?

Beim Übergang von Window$ auf Linux liegt das Problem meist in der Groß- 
und Kleinschreibung der Dateinamen.

von TestX .. (xaos)


Lesenswert?

also die Dateinamen scheinen zu stimmen. Ich verstehe den Fehler nur 
nicht so ganz, das scheint irgendwas ganz triviales mit dem makefile zu 
sein ?

von Stefan E. (sternst)


Lesenswert?

Andi D. schrieb:
> Ich verstehe den Fehler nur
> nicht so ganz, das scheint irgendwas ganz triviales mit dem makefile zu
> sein ?

Ne, es ist genau das, was die Fehlermeldung sagt. In dem Makefile gibt 
es "keine Regel um Target `ARMEMF32.elf' zu machen". Steht die Regel 
vielleicht in einem der vielen Makefile-Teile, die inkludiert werden, 
und du hast die nicht mit kopiert?

von Dirk D. (dirkd)


Lesenswert?

In dem Makefile werden noch jede Menge andere Files über include 
eingezogen

z. B.:
../makefile.init
../makefile.defs

gibt es diese Files auch? Make wird sich nicht über das Fehlen 
beschweren weil sie mit -include eingezogen werden.

In einem dieser Files müsste es ein Target für ARMEMF32.elf geben. Also

ARMEMF32.elf: (Abhängigkeiten)
      (Build Kommando)

Das Standard-Build-Target all erwartet dieses File aber Make "weiß" 
nicht wo das File herkommt weil es kein Target dafür gibt. Daher die 
Fehlermeldung.


Vermutung:
Du hast vergessen eines der anderen Makefiles zu kopieren oder hast es 
an die falsche Stelle kopiert.

von Dirk D. (dirkd)


Lesenswert?

Ooops, das war im wesentlichen das gleiche was Stephan Ernst gesagt hat. 
Hab den Beitrag überlesen ;-)

von TestX .. (xaos)


Lesenswert?

ok danke für den tipp...

../makefile.init
../makefile.defs

existieren nicht bzw. wurden nicht autoamtisch generiert

habe mal das makefile mit anderen automatisch generierten für WinAVR 
verglichen und spaßeshalber mal folgende zeile geändert..
1
#USER_OBJS: $(OBJS) $(USER_OBJS)
2
ARMEMF32.elf: $(OBJS) $(USER_OBJS)

jetzt passiert zumindest was und der gcc wird angeschmissen, leider mit 
sehr vielen fehlern (fehlende dateien etc.)
das GNUARM Eclipse Plugin scheint hier sehr fehlerhaft beim generieren 
des makefiles und der abhängigkeiten zu sein...es macht so einfach 
keinen spaß :(

ich fürchte ich werd einiges an geld für nen professionellen 
compiler+IDE ausgeben müssen

von Stefan E. (sternst)


Lesenswert?

Andi D. schrieb:
> ../makefile.init
> ../makefile.defs
>
> existieren nicht bzw. wurden nicht autoamtisch generiert

Das "../" hast du aber schon gesehen, oder?

Andi D. schrieb:
> das GNUARM Eclipse Plugin scheint hier sehr fehlerhaft beim generieren
> des makefiles und der abhängigkeiten zu sein...es macht so einfach
> keinen spaß :(

Hab das Plugin zwar noch nie benutzt, kann ich mir aber nicht 
vorstellen. Viel wahrscheinlicher ist, dass dein Kopieren nach Linux 
unvollständig war.

Wieso überhaupt dieses Kopieren nach Linux und "händisches Make" dort? 
Wenn du Eclipse benutzen willst, warum dann nicht direkt unter Linux?

von TestX .. (xaos)


Lesenswert?

Stefan Ernst schrieb:

> Das "../" hast du aber schon gesehen, oder?
ja

> Andi D. schrieb:
>> das GNUARM Eclipse Plugin scheint hier sehr fehlerhaft beim generieren
>> des makefiles und der abhängigkeiten zu sein...es macht so einfach
>> keinen spaß :(
>
> Hab das Plugin zwar noch nie benutzt, kann ich mir aber nicht
> vorstellen. Viel wahrscheinlicher ist, dass dein Kopieren nach Linux
> unvollständig war.
kopieren war definitiv vollständig

> Wieso überhaupt dieses Kopieren nach Linux und "händisches Make" dort?
> Wenn du Eclipse benutzen willst, warum dann nicht direkt unter Linux?
ich arbeite ausschließlich unter windows und in eclipse spezieller 
sachen zu integrieren ist einfach schneller als in VisualStudio.
leider sind die für windows verfügbaren arm toolchains entweder 
kostenpflichtig oder werden nicht weiterentwickelt, daher wollte ich das 
compilieren direkt unter linux machen, was ja eigtl kein problem sein 
sollte. eclipse projekt auf linux gcc umstellen, projekt kopieren, make 
und fertig..

von Dirk D. (dirkd)


Lesenswert?

> jetzt passiert zumindest was und der gcc wird angeschmissen, leider mit
> sehr vielen fehlern (fehlende dateien etc.)
Es würde schon helfen wenn wir die Fehlermeldungen kennen würden.


Wobei ich auch sagen muß daß die Linker Regel etwas seltsam aussieht:
USER_OBJS: $(OBJS) $(USER_OBJS)
  @echo 'Invoking: ARM Linux GCC C++ Linker'
  arm-elf-g++ -Wl,-Map,ARMEMF32.map -mcpu=cortex-m3 -mthumb 
-o"USER_OBJS" $(OBJS) $(USER_OBJS) $(LIBS)
  @echo 'Finished building: $@'
  @echo '

Mach mal folgendes daraus:
ARMEMF32.elf: $(OBJS) $(USER_OBJS)
  @echo 'Invoking: ARM Linux GCC C++ Linker'
  arm-elf-g++ -Wl,-Map,ARMEMF32.map -mcpu=cortex-m3 -mthumb -o 
ARMEMF32.elf $(OBJS) $(USER_OBJS) $(LIBS)
  @echo 'Finished building: $@'
  @echo '

Also auch das USER_OBJS bei der -o Option ersetzen.

Was mir auch noch auffällt:
-include CM3/DeviceSupport/EnergyMicro/EFM32/startup/iar/subdir.mk

Wieso wird da etwas angezogen was vermutlich für den IAR compiler 
gedacht ist? Das wird sich mit dem GCC wahrscheinlich eh nicht 
übersetzen lassen.

von TestX .. (xaos)


Lesenswert?

makefile habe ich einmal geändert wie vorgeschlagen, immernoch der 
gleiche fehler..
es scheint irgendetwas komplett schiefzugehen. in der main "touchdemo.c" 
wird das komische IAR startup garnicht eingebunden.
die "fehlenden" header datein existieren alle (im entsprechenden 
unterverzeichnis). eclipse gibt auch keine fehlermeldungen aus.

was ich nicht verstehe, wieso stdint.h nicht existiert. ich habe die gcc 
toolchain mit "newlib" gebaut - der arm-elf-gcc sollte die also kennen ?

zur info, das projekt beinhaltet nichts selbsgeschriebenes, es ist eine 
fertige Demo App für das EMF32 Gecko starter kit..
1
andi@atlantis:/*****/arm/EMF32Test/Release$ make all
2
Building file: ../touchdemo.c
3
Invoking: ARM Linux GCC C Compiler
4
arm-elf-gcc -Os -Wall -Wa,-adhlns="touchdemo.o.lst" -c -fmessage-length=0 -MMD -MP -MF"touchdemo.d" -MT"touchdemo.d" -mcpu=cortex-m3 -mthumb -o"t      ouchdemo.o" "../touchdemo.c"
5
../touchdemo.c:28:20: warning: stdint.h: No such file or directory
6
../touchdemo.c:34:19: error: efm32.h: No such file or directory
7
../touchdemo.c:35:24: error: efm32_chip.h: No such file or directory
8
../touchdemo.c:38:22: error: vddcheck.h: No such file or directory
9
../touchdemo.c:39:24: error: segmentlcd.h: No such file or directory
10
../touchdemo.c:40:22: error: capsense.h: No such file or directory
11
../touchdemo.c:41:17: error: rtc.h: No such file or directory
12
../touchdemo.c:42:23: error: efm32_emu.h: No such file or directory
13
../touchdemo.c:43:23: error: efm32_cmu.h: No such file or directory
14
../touchdemo.c:51: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before âdemoModeâ
15
../touchdemo.c:52: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before âsubModeâ
16
../touchdemo.c:53: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before âsubModesâ
17
../touchdemo.c: In function âGPIO_ODD_IRQHandlerâ:
18
../touchdemo.c:70: error: âuint32_tâ undeclared (first use in this function)
19
../touchdemo.c:70: error: (Each undeclared identifier is reported only once
20
../touchdemo.c:70: error: for each function it appears in.)
21
../touchdemo.c:70: error: expected â;â before âmaxâ
22
../touchdemo.c:73: error: âGPIOâ undeclared (first use in this function)
23
../touchdemo.c:76: error: âmaxâ undeclared (first use in this function)
24
../touchdemo.c:76: error: âsubModesâ undeclared (first use in this function)
25
../touchdemo.c:77: error: âsubModeâ undeclared (first use in this function)
26
../touchdemo.c: In function âGPIO_EVEN_IRQHandlerâ:
27
../touchdemo.c:86: error: âGPIOâ undeclared (first use in this function)
28
../touchdemo.c:89: error: âdemoModeâ undeclared (first use in this function)
29
../touchdemo.c:92: error: âsubModeâ undeclared (first use in this function)
30
../touchdemo.c:97: error: âsubModesâ undeclared (first use in this function)
31
../touchdemo.c: In function âgpioSetupâ:
32
../touchdemo.c:111: error: âCMUâ undeclared (first use in this function)
33
../touchdemo.c:111: error: âCMU_HFPERCLKEN0_GPIOâ undeclared (first use in this function)
34
../touchdemo.c:114: error: âGPIOâ undeclared (first use in this function)
35
../touchdemo.c:114: error: â_GPIO_P_MODEH_MODE10_MASKâ undeclared (first use in this function)
36
../touchdemo.c:115: error: âGPIO_P_MODEH_MODE10_INPUTPULLâ undeclared (first use in this function)
37
../touchdemo.c:122: error: â_GPIO_EXTIPSELH_EXTIPSEL10_MASKâ undeclared (first use in this function)
38
../touchdemo.c:123: error: âGPIO_EXTIPSELH_EXTIPSEL10_PORTBâ undeclared (first use in this function)
39
../touchdemo.c:127: warning: implicit declaration of function âNVIC_ClearPendingIRQâ
40
../touchdemo.c:127: error: âGPIO_EVEN_IRQnâ undeclared (first use in this function)
41
../touchdemo.c:128: warning: implicit declaration of function âNVIC_EnableIRQâ
42
../touchdemo.c:131: error: â_GPIO_P_MODEH_MODE9_MASKâ undeclared (first use in this function)
43
../touchdemo.c:132: error: âGPIO_P_MODEH_MODE9_INPUTPULLâ undeclared (first use in this function)
44
../touchdemo.c:139: error: â_GPIO_EXTIPSELH_EXTIPSEL9_MASKâ undeclared (first use in this function)
45
../touchdemo.c:140: error: âGPIO_EXTIPSELH_EXTIPSEL9_PORTBâ undeclared (first use in this function)
46
../touchdemo.c:144: error: âGPIO_ODD_IRQnâ undeclared (first use in this function)
47
../touchdemo.c: In function âcapSenseAringUpdateâ:
48
../touchdemo.c:173: warning: implicit declaration of function âSegmentLCD_ARingâ
49
../touchdemo.c: In function âcapSenseBarsâ:
50
../touchdemo.c:192: warning: implicit declaration of function âCAPSENSE_getSliderPositionâ
51
../touchdemo.c:193: warning: implicit declaration of function âSegmentLCD_Numberâ
52
../touchdemo.c:197: warning: implicit declaration of function âSegmentLCD_Writeâ
53
../touchdemo.c: In function âcapSenseValuesâ:
54
../touchdemo.c:219: error: âuint8_tâ undeclared (first use in this function)
55
../touchdemo.c:219: error: expected â;â before âchannelâ
56
../touchdemo.c:221: error: âsubModeâ undeclared (first use in this function)
57
../touchdemo.c:225: error: âchannelâ undeclared (first use in this function)
58
../touchdemo.c:225: error: âSLIDER_PART0_CHANNELâ undeclared (first use in this function)
59
../touchdemo.c:229: error: âSLIDER_PART1_CHANNELâ undeclared (first use in this function)
60
../touchdemo.c:233: error: âSLIDER_PART2_CHANNELâ undeclared (first use in this function)
61
../touchdemo.c:237: error: âSLIDER_PART3_CHANNELâ undeclared (first use in this function)
62
../touchdemo.c:241: error: âBUTTON_CHANNELâ undeclared (first use in this function)
63
../touchdemo.c:245: warning: implicit declaration of function âCAPSENSE_getNormalizedValâ
64
../touchdemo.c: In function âcapSenseDemoâ:
65
../touchdemo.c:280: error: âint32_tâ undeclared (first use in this function)
66
../touchdemo.c:280: error: expected â;â before âsliderâ
67
../touchdemo.c:287: warning: implicit declaration of function âCAPSENSE_Senseâ
68
../touchdemo.c:288: error: âsliderâ undeclared (first use in this function)
69
../touchdemo.c:290: warning: implicit declaration of function âSegmentLCD_Symbolâ
70
../touchdemo.c:290: error: âLCD_SYMBOL_GECKOâ undeclared (first use in this function)
71
../touchdemo.c:290: warning: implicit declaration of function âCAPSENSE_getPressedâ
72
../touchdemo.c:290: error: âBUTTON_CHANNELâ undeclared (first use in this function)
73
../touchdemo.c:295: warning: implicit declaration of function âVddCheckInitâ
74
../touchdemo.c:298: warning: implicit declaration of function âVddCheckLowVoltageâ
75
../touchdemo.c:304: warning: implicit declaration of function âSegmentLCD_Initâ
76
../touchdemo.c:306: error: âLCD_SYMBOL_ANTâ undeclared (first use in this function)
77
../touchdemo.c:315: error: âdemoModeâ undeclared (first use in this function)
78
../touchdemo.c:329: warning: implicit declaration of function âRTC_Triggerâ
79
../touchdemo.c:330: warning: implicit declaration of function âEMU_EnterEM2â
80
../touchdemo.c: In function âmainâ:
81
../touchdemo.c:340: warning: implicit declaration of function âCHIP_Initâ
82
../touchdemo.c:343: warning: implicit declaration of function âSystemCoreClockUpdateâ
83
../touchdemo.c:359: warning: implicit declaration of function âCAPSENSE_Initâ
84
make: *** [touchdemo.o] Error 1

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.