3

libswscale.so.2文字列を(それぞれとlibswscale.so呼ばれる変数)に置き換えたい。これは私がMakefileで試したことです:$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)

$(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SUBDIR)lib$(NAME).ver
    [...]
    @echo SHFLAGS=$(SHFLAGS)
    @echo SLIBNAME_WITH_MAJOR=$(SLIBNAME_WITH_MAJOR)
    @echo SLIBNAME=$(SLIBNAME)
    @echo A $(patsubst $(SLIBNAME_WITH_MAJOR),$(SLIBNAME),$(SHFLAGS))
    @echo B $(SHFLAGS:$(SLIBNAME_WITH_MAJOR)=$(SLIBNAME))
    @echo C $($(SHFLAGS):$(SLIBNAME_WITH_MAJOR)=$(SLIBNAME))
    @echo D $(SHFLAGS:$(SLIBNAME_WITH_MAJOR)=$(SLIBNAME))
    @echo E $(subst $(SLIBNAME_WITH_MAJOR),$(SLIBNAME),$(SHFLAGS))
    @echo F $(subst l,L,$(SHFLAGS))

出力は

SHFLAGS=-shared -Wl,-soname,libswscale.so.2 -Wl,-Bsymbolic -Wl,--version-script,libswscale/libswscale.ver
SLIBNAME_WITH_MAJOR=libswscale.so.2
SLIBNAME=libswscale.so
A -shared -Wl,-soname,libswscale.so.2 -Wl,-Bsymbolic -Wl,--version-script,libswscale/libswscale.ver
B -shared -Wl,-soname,libswscale.so.2 -Wl,-Bsymbolic -Wl,--version-script,libswscale/libswscale.ver
C
D -shared -Wl,-soname,libswscale.so.2 -Wl,-Bsymbolic -Wl,--version-script,libswscale/libswscale.ver
E -shared -Wl,-soname,libswscale.so.2 -Wl,-Bsymbolic -Wl,--version-script,libswscale/libswscale.ver
F -shared -WL,-soname,libswscale.so.2 -WL,-BsymboLic -WL,--version-script,LibswscaLe/LibswscaLe.ver

最後のもの(F)は特にばかげています。ここで何が問題になっていますか?$(SHFLAGS)変数もで構成されているからですか?

4

1 に答える 1

8

それを見つけた:$(SHFLAGS)として定義された

SHFLAGS=-shared -Wl,-soname,$$(@F) blablafoo

$$(@F)そして、それに置換を使用することは、実際に評価されるまで機能しません(私の場合はlibswscale.so.2)。

変数参照を置き換えることで解決しました:

@echo $(subst $$(@F),$(SLIBNAME),$(SHFLAGS))

割り当てに関する小さなヒント:VAR = $(OTHERVAR)使用時に評価され、VAR := $(OTHERVAR)すぐに評価されます。

于 2013-01-25T13:30:16.453 に答える