我想从具有完整路径的库列表中构建链接器标记LDFLAGS
。这就是为什么我被困住的地方。 (库名称是Linux样式,但是我认为这对于解决这个问题并不重要。)
FULL_LIBS = \
./path1/libone.a \
../../path2/libtwo.a
# etc.
LIB_DIRS = $(dir $(FULL_LIBS))
LIB_NAMES = $(basename $(notdir $(FULL_LIBS)))
LIB_NAMES_TRIMMED = # zzz trim leading "lib" somehow??? This is what I don't know how to do, or at least the best way
LDFLAGS += \
$(addprefix -L, $(LIB_DIRS)) \
$(addprefix -l, $(LIB_NAMES_TRIMMED))
如果期望的结果不明显,则应类似于
LDFLAGS += -L./path1 -L../../path2 -lone -ltwo
不确定我是否需要正则表达式(或sed
/ awk
/ grep
),因此我将保留该标签({{3} })。
答案 0 :(得分:1)
您可以使用make(https://www.gnu.org/software/make/manual/html_node/Text-Functions.html#Text-Functions)的文本处理功能:
LIB_NAMES_TRIMMED = $(subst lib,,$(LIB_NAMES))
尽管如果字符串“ lib”出现在库名称的其他位置,则此操作可能会失败。为避免这种情况,我们可以使用2个步骤:
LIB_NAMES_TRIMMED = $(basename $(notdir $(subst /lib,/,$(FULL_LIBS))))
正如Matt所解释的,使用patsubst甚至更简单:
LIB_NAMES_TRIMMED = $(patsubst lib%,%,$(LIB_NAMES))