gpt4 book ai didi

c++ - Makefile 更新库依赖

转载 作者:太空狗 更新时间:2023-10-29 23:47:57 26 4
gpt4 key购买 nike

我有一个很大的 makefile,它构建了几个库,安装它们,然后继续构建链接到那些已安装库的对象。我的麻烦是我想使用“-lfoo -lbar”作为 g++ 标志来链接两个已安装的库,但依赖关系变得困惑。如果我更改了库 foo 所依赖的 header “42.h”,那么 make 当然会重建并安装它,但它确实没有似乎注意到我的对象“marvin”使用了“- lfoo"和 marvin 与旧版本保持链接...:(

到目前为止,我一直在做:

$(myObject): $(localSrc) /explicit/path/to/lib/libfoo.a
$(CXX) $(CPPFLAGS) $(INCFLAGS) -o $@ $^ $(LINKFLAGS) $(LINKLIBS)

但我正处于一个不再可行的选择的地步。我需要简单地将库“-lfoo -lbar”添加到 LINKFLAGS 变量并让链接器解决问题吗?

与此同时,我已经为一些命令设置了别名以显式清除有问题的目标文件,然后调用 make,但这越来越愚蠢了。我时间紧迫,但如有必要,我可以在周五晚上或周六早上发布一个小示例。

因此,我觉得我又回到了一些糟糕版本的 windows dll hell 。我可以做些什么来让链接器注意到构建对象所针对的库的版本,并在这些库发生变化时重新链接它??

更新:所以直到现在我才有机会崩溃这些建议。我正在做的事情的缺点是使用静态库。所以我不能使用ldd。所以我重写了我的 Makefile 并找到了解决这个问题的方法。如果我有时间,我会发布我所做的。

最佳答案

这个怎么样:

LIBS = foo bar blah # and so on

LINKFLAGS = $(addprefix -l,$(LIBS))

LIBPATHS = $(patsubst %,/explicit/path/to/lib/lib%.so, $(LIBS))

$(myObject): $(localSrc) $(LIBPATHS)
$(CXX) $(CPPFLAGS) $(INCFLAGS) -o $@ $^ $(LINKFLAGS) $(LINKLIBS)

关于c++ - Makefile 更新库依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3200235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com