Makefile更新了库依赖项

M. *_*its 2 c++ linker dependencies makefile

我有一个大的makefile,它构建了几个库,安装它们,然后继续构建与这些已安装的库链接的对象.我的麻烦是我想使用"-lfoo -lbar"作为g ++标志来链接两个已安装的库,但依赖关系搞砸了.如果我更改库foo所依赖的标题"42.h",那么make当然会重建并安装它,但它似乎没有注意到我的对象"marvin"使用了"-lfoo"而marvin是左链接的对旧版本...... :(

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

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

但我现在已经不再是一个可行的选择了.我需要简单地将库"-lfoo -lbar"添加到LINKFLAGS变量并让链接器解决问题?

与此同时,我已经使用了一些命令来明确地吹走有问题的目标文件,然后调用make,但这很愚蠢.我很紧张,但如果有必要,我可以在周五晚上或周六早上发布一个小例子.

因此,我觉得我回到了一些糟糕的Windows版本地狱.有什么我可以做的事情让链接器注意到对象构建的库的版本,并重新链接它,如果这些库更改?

更新:所以到目前为止我还没有机会崩溃这些建议.我正在做的缺点是使用静态库.所以我不能用ldd.所以我重写了我的Makefile,找到了解决这个问题的方法.如果我有时间,我会发布我所做的.

Bet*_*eta 7

这个怎么样:

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)
Run Code Online (Sandbox Code Playgroud)