Makefile中的条件语句:缺少分隔符错误? [英] Conditionals in Makefile: missing separator error?
问题描述
我要按照 http://sunsite.ualberta.ca/Documentation/Gnu/make-3.79/html_chapter/make_7.html#SEC72 .但是,我得到了错误Makefile:219: *** missing separator. Stop.
,其中第219行是带有ifeq
语句的行. -$(FC)
的三行确实以制表符开头.
I want to write some conditionals in a Makefile, following the guide at http://sunsite.ualberta.ca/Documentation/Gnu/make-3.79/html_chapter/make_7.html#SEC72. However, I get the error Makefile:219: *** missing separator. Stop.
, where line 219 is the line with the ifeq
statement. The three lines with the -$(FC)
do start with a tab.
我正在使用GNU Make 3.81.任何帮助,我们将不胜感激!
I'm using GNU Make 3.81. Any help is greatly appreciated!
[...]
mod: $(MODBIN)
$(MODBIN): $(MODSRC)
ifeq($(FC),gfortran)
-$(FC) $(MODFLAGS) -J$(INCPATH) $(INCLUDE) -c -o $@ $(subst $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS)
else ifeq($(FC),ifort)
-$(FC) $(MODFLAGS) -module $(INCPATH) $(INCLUDE) -c -o $@ $(subst $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS)
else ifeq ($(FC),xlf2003_r)
-$(FC) $(MODFLAGS) -qmoddir=$(INCPATH) $(INCLUDE) -c -o $@ $(subst $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS)
endif
io: $(IOBIN)
[...]
根据@ sagar-sakre的建议,我更改为:
Following the advice by @sagar-sakre, I changed to this:
[...]
mod: $(MODBIN)
$(MODBIN): $(MODSRC)
ifeq($(B3dC),gfortran)
-$(FC) $(MODFLAGS) -J$(INCPATH) $(INCLUDE) -c -o $@ $(subst $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS)
else ifeq($(B3dC),ifort)
-$(FC) $(MODFLAGS) -module $(INCPATH) $(INCLUDE) -c -o $@ $(subst $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS)
else ifeq ($(B3dC),xlf2003_r)
-$(FC) $(MODFLAGS) -qmoddir=$(INCPATH) $(INCLUDE) -c -o $@ $(subst $(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS)
endif endif endif
io: $(IOBIN)
[...]
但是,现在出现此错误:
However, now I get this error:
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
所以这里还是有问题...
So still something's wrong here ...
推荐答案
ifeq后应该有一个[空格]
There should be a [space] after ifeq
mod: $(MODBIN)
$(MODBIN): $(MODSRC)
ifeq ($(FC),gfortran)
-$(FC) $(MODFLAGS) -J$(INCPATH) $(INCLUDE) -c -o $@ $(subst
$(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS)
else ifeq ($(FC),ifort)
-$(FC) $(MODFLAGS) -module $(INCPATH) $(INCLUDE) -c -o $@ $(subst
$(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS)
else ifeq ($(FC),xlf2003_r)
-$(FC) $(MODFLAGS) -qmoddir=$(INCPATH) $(INCLUDE) -c -o $@ $(subst
$(BUILDPATH),$(MODPATH),$*).f90 $(NETCDFLDFLAGS)
endif
常规Makefile为
General Makefile would be
target:dependencies
ifeq ( parm1, parm2)
[TAB] operation
else
[TAB] operation
endif
这篇关于Makefile中的条件语句:缺少分隔符错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!