我有一个很大的 makefile,它构建几个库,安装它们,然后继续构建链接到这些已安装库的对象。我的麻烦是我想使用“-lfoo -lbar”作为 g++ 标志来链接两个已安装的库,但依赖关系变得混乱。如果我更改库 foo 所依赖的标头“42.h”,那么 make 当然会重建并安装它,但它确实not似乎注意到我的对象“marvin”使用了“-lfoo”,并且 marvin 与旧版本保持链接......:(
到目前为止,我一直在做:
$(myObject): $(localSrc) /explicit/path/to/lib/libfoo.a
$(CXX) $(CPPFLAGS) $(INCFLAGS) -o $@ $^ $(LINKFLAGS) $(LINKLIBS)
但我现在已经不再是一个可行的选择了。我需要简单地将库“-lfoo -lbar”添加到 LINKFLAGS 变量并让链接器弄清楚?
与此同时,我给一些命令起了别名,以显式地清除有问题的目标文件,然后调用 make,但这变得很愚蠢。我时间紧迫,但如果有必要,我可以在周五晚上或周六早上发布一个小例子。
因此,我感觉自己又回到了 Windows DLL 地狱的某个糟糕版本。我可以做些什么来让链接器注意到构建对象的库的版本,并在这些库发生变化时重新链接它?
Updated:所以直到现在我还没有机会推翻这些建议。我正在做的事情的缺点是使用静态库。所以我不能使用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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)