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,找到了解决这个问题的方法.如果我有时间,我会发布我所做的.
这个怎么样:
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)