Permalänk

Problem med ifneq i Makefile

Leker och testar lite med Makefile på min Mac.

Kollade på sidan: http://www.gnu.org/software/make/manual/make.html#Conditional...

Tänkte försöka få till en if-sats i Makefilen(från sidan ovan):

ifeq ($(CC),gcc)
$(CC) -o foo $(objects) $(libs_for_gcc)
else
$(CC) -o foo $(objects) $(normal_libs)
endif

Här är mitt försök men får inte det att fungera. Är det en annan version av makefile som används på Mac? eller varför fungerar inte detta?

CC = gcc
make: hellomake.c hellofunc.c
gcc -o hellomake hellomake.c hellofunc.c -I.
ifeq ($(CC),gcc)
echo "Working"
endif

Jag får följande fel i terminalen:

gcc -o hellomake hellomake.c hellofunc.c -I.
echo "Working"
Test
ifeq (gcc,gcc)
/bin/sh: -c: line 0: syntax error near unexpected token `gcc,gcc'
/bin/sh: -c: line 0: `ifeq (gcc,gcc)'
make: *** [make] Error 2

Någon som vet varför det går fel och isåfall hur man löser det?

Permalänk
Entusiast
Skrivet av GainerPRO:

Leker och testar lite med Makefile på min Mac.

Kollade på sidan: http://www.gnu.org/software/make/manual/make.html#Conditional...

Tänkte försöka få till en if-sats i Makefilen(från sidan ovan):

ifeq ($(CC),gcc)
$(CC) -o foo $(objects) $(libs_for_gcc)
else
$(CC) -o foo $(objects) $(normal_libs)
endif

Här är mitt försök men får inte det att fungera. Är det en annan version av makefile som används på Mac? eller varför fungerar inte detta?

CC = gcc
make: hellomake.c hellofunc.c
gcc -o hellomake hellomake.c hellofunc.c -I.
ifeq ($(CC),gcc)
echo "Working"
endif

Jag får följande fel i terminalen:

gcc -o hellomake hellomake.c hellofunc.c -I.
echo "Working"
Test
ifeq (gcc,gcc)
/bin/sh: -c: line 0: syntax error near unexpected token `gcc,gcc'
/bin/sh: -c: line 0: `ifeq (gcc,gcc)'
make: *** [make] Error 2

Någon som vet varför det går fel och isåfall hur man löser det?

Det är rätt lustigt att /bin/sh ger dig det felmeddelandet. Jag kan ha fel dock.
Tanken är att make (gmake?) är den som skall läsa Makefile när du exekverar kommandot make.

Jag vet också att Makefile är mycket kinkig på syntax. Speciellt om det ligger tabbar, flera mellanslag och radmatningar där det inte skall finnas några. Eller rentav avsaknaden av mellanslag.

Vad händer om du försöker med ifeq (gcc, gcc) istället. (Notera mellanslaget i "gcc, gcc")

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk

Har fått det att fungera nu. Verkar som om if-satsen måste komma innan "make: hellomake.c hellofunc.c". Dock kan något ut skrift göras i if-satsen utan den måste komma efter "make: hellomake.c hellofunc.c".

CC = gcc #ifeq ($(CC)), 'gcc') ifeq ($(CC), gcc) TEXT = "Working" else TEXT = "Not working" endif make: hellomake.c hellofunc.c gcc -o hellomake hellomake.c hellofunc.c -I. @ echo $(TEXT)

Permalänk
Medlem

Tjenare!

Jag har postat en tråd om Makefiler i programmerings forumet, men inte fått någon större respons på det. Tänkte passa på att ställa frågan här också, då ni verkar kunniga kring detta.

Posten hittas här:
http://www.sweclockers.com/forum/10-programmering-och-digital...

Permalänk

ifneq/ifeq/else/endif måste vara först på raden, dvs inga mellanslag före.

CC=gcc all: working: ifeq ($(CC), gcc) @ echo hello else @ echo goodbye endif @ echo world broken: ifeq ($CC), gcc) @ echo hello else @ echo goodbye endif @ echo world

Resultat:

└───> make working hello world ┐ (sebastian@Belgarion) [21:12:00|lör aug 25] [/tmp/maketest] └───> make working CC=a goodbye world ┐ (sebastian@Belgarion) [21:12:07|lör aug 25] [/tmp/maketest] └───> make broken ifeq (gcc, gcc) /bin/sh: -c: rad 0: syntaxfel nära den oväntade symbolen "gcc," /bin/sh: -c: rad 0: `ifeq (gcc, gcc)' make: *** [broken] Fel 1 ┐ (sebastian@Belgarion) [21:12:09|lör aug 25] [/tmp/maketest] └───> make broken CC=a ifeq (a, gcc) /bin/sh: -c: rad 0: syntaxfel nära den oväntade symbolen "a," /bin/sh: -c: rad 0: `ifeq (a, gcc)' make: *** [broken] Fel 1