0
$(foreach name, $(patsubst lib%.a,%,$(LIBS)), \
          $(eval lib$(name).a : lib$(name).a($$($(name)_OBJS))))

上記の行で Make が失敗し、セパレーターが見つからないというメッセージが表示されます。

:68: *** missing separator.  Stop.
4

1 に答える 1

1

GNUMake マニュアルから:

同じアーカイブ内の複数のメンバーを指定するには、すべてのメンバー名を括弧内にまとめて記述します。例えば:

 foolib(hack.o kludge.o)

次と同等です。

 foolib(hack.o) foolib(kludge.o)

ただし、これは前提条件には当てはまらないようです (GNUMake 3.8.2):

# This works:
     flib: foolib(hack.o) foolib(kludge.o)

# This doesn't:
     flib: foolib(hack.o kludge.o)

したがって、小さな変更が必要なだけです (@Neil のショートカットと括弧の慎重な処理を使用):

# Change this:
$(foreach name, $(LIBS:lib%.a=%), \
  $(eval lib$(name).a : lib$(name).a($$($(name)_OBJS))))


# to this:
lparen := (
rparen := )

$(foreach name, $(LIBS:lib%.a=%), \
  $(eval lib$(name).a : $($(name)_OBJS:%=lib$(name).a$(lparen)%$(rparen))))
于 2012-05-28T12:52:49.557 に答える