2013-05-27 2 views
2

Я хочу написать некоторые условные выражения в Makefile, следуя руководству по адресу http://sunsite.ualberta.ca/Documentation/Gnu/make-3.79/html_chapter/make_7.html#SEC72. Однако, я получаю ошибку Makefile:219: *** missing separator. Stop., где строка 219 является строкой с оператором ifeq. Три строки с -$(FC) начинаются с вкладки.Условные обозначения в файле Makefile: отсутствует ошибка разделителя?

Я использую GNU Make 3,81. Любая помощь очень ценится!

[...] 

mod: $(MODBIN) 

$(MODBIN): $(MODSRC) 
ifeq($(FC),gfortran) 
    -$(FC) $(MODFLAGS) -J$(INCPATH) $(INCLUDE) -c -o [email protected] $(subst $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS) 
else ifeq($(FC),ifort) 
    -$(FC) $(MODFLAGS) -module $(INCPATH) $(INCLUDE) -c -o [email protected] $(subst $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS) 
else ifeq ($(FC),xlf2003_r) 
    -$(FC) $(MODFLAGS) -qmoddir=$(INCPATH) $(INCLUDE) -c -o [email protected] $(subst $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS) 
endif 

io: $(IOBIN) 

[...] 

EDIT: Следуя советам по @ Сагар-sakre, я изменил к этому:

[...] 
mod: $(MODBIN) 

$(MODBIN): $(MODSRC) 
    ifeq($(B3dC),gfortran) 
    -$(FC) $(MODFLAGS) -J$(INCPATH) $(INCLUDE) -c -o [email protected] $(subst $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS) 
    else ifeq($(B3dC),ifort) 
    -$(FC) $(MODFLAGS) -module $(INCPATH) $(INCLUDE) -c -o [email protected] $(subst $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS) 
    else ifeq ($(B3dC),xlf2003_r) 
    -$(FC) $(MODFLAGS) -qmoddir=$(INCPATH) $(INCLUDE) -c -o [email protected] $(subst $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS) 
    endif endif endif 

io: $(IOBIN) 
[...] 

Однако, теперь я получаю эту ошибку:

ifeq(xlf,gfortran) 
/bin/sh: -c: line 0: syntax error near unexpected token `xlf,gfortran' 
/bin/sh: -c: line 0: `ifeq(xlf,gfortran)' 
make: *** [build/basic.o] Error 2 

Так что еще что-то неправильно здесь ...

+0

Извините, что я MIS наставил вас. правильное решение отредактировано ниже. –

ответ

6

Должно быть [пробел] после ifeq

mod: $(MODBIN) 
$(MODBIN): $(MODSRC) 
ifeq ($(FC),gfortran) 
    -$(FC) $(MODFLAGS) -J$(INCPATH) $(INCLUDE) -c -o [email protected] $(subst 
    $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS) 
else ifeq ($(FC),ifort) 
    -$(FC) $(MODFLAGS) -module $(INCPATH) $(INCLUDE) -c -o [email protected] $(subst 
    $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS) 
else ifeq ($(FC),xlf2003_r) 
    -$(FC) $(MODFLAGS) -qmoddir=$(INCPATH) $(INCLUDE) -c -o [email protected] $(subst 
    $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS) 
endif 

Общие Makefile будет

target:dependencies 
ifeq (parm1, parm2) 
[TAB] operation 
else 
[TAB] operation 
endif 
+0

спасибо! это сделало меня на один шаг дальше, но не до цели. Теперь я получаю синтаксическую ошибку *. См. Мое обновленное сообщение. –

+1

Пожалуйста, пересмотрите отредактированное решение. –

Смежные вопросы