【问题标题】:C Makefile - missing seperator. stop [duplicate]C Makefile - 缺少分隔符。停止[重复]
【发布时间】:2017-08-07 11:04:40
【问题描述】:

这是我的 Makefile,我收到错误“***缺少分隔符。停止” 我正在尝试编译一个库,但由于某种原因我收到此错误消息。其他类似的 SO 问题表明这是一个选项卡问题,但我无法解决。

CC=g++
RANLIB=ranlib

LIBSRC=osm.c 
LIBOBJ=$(LIBSRC:.c=.o)

INCS=-I.
CFLAGS = -Wall -g $(INCS)
LOADLIBES = -L./ 

OSMLIB = libosm.a
TARGETS = $(OSMLIB)

TAR=tar
TARFLAGS=-cvf
TARNAME=ex1.tar
TARSRCS=$(LIBSRC) Makefile README

all: $(TARGETS) 

$(TARGETS): $(LIBOBJ)
$(AR) $(ARFLAGS) $@ $^ //this line fails with the warning
$(RANLIB) $@

clean:
$(RM) $(TARGETS) $(OSMLIB) $(OBJ) $(LIBOBJ) *~ *core

depend:
makedepend -- $(CFLAGS) -- $(SRC) $(LIBSRC)

tar:
$(TAR) $(TARFLAGS) $(TARNAME) $(TARSRCS)

【问题讨论】:

  • 选项卡在命令行开头是强制性的
  • 这里哪些行需要制表符?

标签: c makefile


【解决方案1】:

Makefile 要求规则中的所有“命令”都缩进一个制表符。

例如,您有以下规则:

clean:
$(RM) $(TARGETS) $(OSMLIB) $(OBJ) $(LIBOBJ) *~ *core

这是错误的,命令行应该带有一个实际的制表符(而不是空格)

clean:
    $(RM) $(TARGETS) $(OSMLIB) $(OBJ) $(LIBOBJ) *~ *core

【讨论】:

  • 谢谢,为什么我在 Makefile 中注释的特定行中出现错误?
  • @Sharonica 因为它是 first 出现错误。如果你修复它,而不是其他的,那么你会在下一个得到错误,依此类推。
  • 显然问题在于 CLion 的缩进为空格。这真的应该已经处理了。
  • 非常感谢!
【解决方案2】:
CC=g++
RANLIB=ranlib

LIBSRC=osm.c 
LIBOBJ=$(LIBSRC:.c=.o)

INCS=-I.
CFLAGS = -Wall -g $(INCS)
LOADLIBES = -L./ 

OSMLIB = libosm.a
TARGETS = $(OSMLIB)

TAR=tar
TARFLAGS=-cvf
TARNAME=ex1.tar
TARSRCS=$(LIBSRC) Makefile README

all: $(TARGETS) 

$(TARGETS): $(LIBOBJ)
     $(AR) $(ARFLAGS) $@ $^ //this line fails with the warning
     $(RANLIB) $@

clean:
     $(RM) $(TARGETS) $(OSMLIB) $(OBJ) $(LIBOBJ) *~ *core

depend:
     makedepend -- $(CFLAGS) -- $(SRC) $(LIBSRC)

tar:
     $(TAR) $(TARFLAGS) $(TARNAME) $(TARSRCS)

【讨论】:

    【解决方案3】:

    make 文件具有特定的结构和语法。一般:

    <target> : <dependencies>
    <tab><instructions>
    

    行首的制表符是语法的一部分。

    【讨论】:

      猜你喜欢
      • 2014-07-18
      • 2023-03-21
      • 1970-01-01
      • 2019-02-06
      • 2022-01-20
      • 2013-09-26
      相关资源
      最近更新 更多