Makefile中的条件语句:缺少分隔符错误?

8
我想在Makefile中编写一些条件语句,遵循http://sunsite.ualberta.ca/Documentation/Gnu/make-3.79/html_chapter/make_7.html#SEC72的指南。然而,我遇到了错误Makefile:219: *** missing separator. Stop.,其中第219行是ifeq语句所在的行。带有-$(FC)的三行确实以制表符开头。
我使用的是GNU Make 3.81。非常感谢您的帮助!
[...]

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的建议,我改为这样:

[...]
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)
[...]

然而,现在我遇到了这个错误:
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

所以这里仍然有些问题...

抱歉我误导了你。正确的解决方案已经被编辑在下面。 - Sagar Sakre
1个回答

18

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应该是:

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

谢谢!这让我进一步了解了,但还没有达到目标。现在出现了一个“语法错误”。请查看我更新的帖子。 - andreas-h

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接