首页 > 解决方案 > 如何检测是否需要共享库符号链接?

问题描述

我有多个项目共享的makefile,它链接共享库。源——和库名称——由每个项目自己的GNUmakefile.

当 library-name ( ${SO}) 包含版本(例如libfoo.so.2)时,我需要创建一个符号链接:

 libfoo.so -> libfoo.so.2

在此示例中删除版本号的优雅方法是什么?

SO_LINK=$(???? ${SO})
...
ifneq(${SO_LINK},${SO})
      ln -sf ${SO} ${SO_LINK}
endif

标签: gnu-make

解决方案


您可以使用subst获取版本,然后使用filter-outorsubst从库名称中减去版本。此外,您可以提取后缀SUB=$(suffix $(VAR))

VAR = libfoo.so.2
TTT=libfoo.so

TMPVAR := $(VAR)
SUB=$(subst $(TTT),, $(TMPVAR))
VAR = $(filter-out $(SUB) , $(TMPVAR))

all:
    @echo "VAR is: $(VAR)"

推荐阅读