2011-04-19 29 views
7

Kural kodumda ifeq kullanmaya çalışıyorum ve sorun yaşıyorum. Ben girintileri kullanmadığınızda, o zaman olsun,Makefile ifeq problem

"/bin/sh: -c: line 0: syntax error near unexpected token `mcc.exe,mcc.exe' 
/bin/sh: -c: line 0: `ifeq(mcc.exe,mcc.exe)'" 

Ama: Ben bu çalıştırdığınızda

$(OBJS): $(OBJDIR)/%.o : ../%.c 
    @mkdir -p $(dir [email protected]) 
    ifeq(mcc.exe,$(CC)) 
     o_file:=$(shell echo [email protected] | sed -e 's/\/cygdrive\///' | sed -e 's/\([a-zA-Z]\)/\1:/') 
     $(CC) $(CFLAGS) $< -o $(o_file) 
    else 
     $(CC) $(CFLAGS) $< -o [email protected] 
    endif 

, alıyorum: Bu benim ile sorun yaşıyorum kuraldır "Makefile: 77 : * eksik ayırıcı. Dur. "

Cygwin'de GNU make 3.81 kullanıyorum. Ifeq ile ilgili tüm sayı iki maket için aynı Makefile sahip olduğum gerçeğinden geliyor ve bunlardan biri (mcc.exe) /cygdrive/c/.../something yolları ile baş edemiyor, ancak bunun yerine c olmalıdır: /.../bir şey yolu. Bu konuda çalışmak için başka bir yol biliyorsanız, ben de çok minnettar olurum!

Teşekkürler!

+5

Cevabı buldum! Herhangi bir ihbar olmamalı, ama ifeq ve açık parantez arasında boşluk olmalı '('.. Sorun çözüldü! Umarım bu birilerine yardım eder ... – Nikola

+0

Bu beni biraz şaşırttı, teşekkürler. – Sam

cevap

10

ifeq..., else ve endif'u içeren çizgiler bir sekmeyle başlatılmamalıdır. Eğer yaparlarsa, tarifin bir parçası olarak ele alınırlar ve kabuğa gönderilir; Bu,/bin/sh adresinden aldığınız sözdizimi hatasına yol açar; Örnek için bkz the make manual.

Girintiyi kullanmadığınızda neden bir hata aldığınızdan emin değilim. Belki böyle bir tarifte bir değişken tanımlayamazsınız?

Düzenleme: Yanıtı bulduğunuzu gördüm. Yani, hiçbir girinti ve ifeq ve parantez arasında bir boşluk.