Я хочу написать некоторые условные выражения в 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
Так что еще что-то неправильно здесь ...
Извините, что я MIS наставил вас. правильное решение отредактировано ниже. –