链接名称不一致的库(boost_thread)

时间:2018-08-30 00:55:41

标签: boost makefile linker gnu-make

我正在构建一个Makefile,它的目标链接到boost_thread。有一个小问题,boost_threadtwo identical veritiesboost_threadboost_thread-mt。 Fedora的boost软件包仅提供boost_thread,Ubuntu软链接boost_threadboost_thread-mt,而macOS上的Homebrew仅提供boost_thread-mt(除非您安装了不同的标志)。

这种差异很不幸。理想情况下,我希望我的Makefile能够在不需要人工干预的情况下进行调和(要求用户将彼此软链接-除非您愿意,否则没有root可能无法实现)很多扭曲)。我想到了类似this的内容:

LIBBOOST_THREAD:=$(shell ldconfig -p | grep libboost_thread | awk '{print $1}' | cut -d. -f1)

target: $(OBJECTS)
    $(CXX) $^ -o $@ $(LDFLAGS) -l$(LIBBOOST_THREAD)

但是,这种方法严重地不能处理LDFLAGS中的任何额外配置(如果提供了-L,则ldconfig将不知道要搜索它)。似乎要求我们解析gcc标志非常脆弱,这使所有操作变得笨拙。

我最好的刺路

LIBBOOST_THREAD:=$(shell echo $(LDFLAGS) | xargs printf -- '%s\n' | grep '^-L' | cut -b 3- | xargs ldconfig -p | grep libboost_thread | awk '{print $1}' | cut -d. -f1)

这是难看的,并且可能无法正确处理LDFLAGS中的某些引号或换行符。

在没有那么多脆弱性的情况下,是否有任何合理的方法来自动化此操作?也许是一种向gcc询问此列表的方法(或有条件地选择适当的lib)?

0 个答案:

没有答案