使用autotools链接生成的库

时间:2014-08-06 10:37:48

标签: makefile autotools static-linking

我有以下目录结构

src/
    kernel/
    gui/

在kernel /目录中,我已经生成了一个名为libkernel.a的库,在gui /目录中,我必须使用libkernel.a来生成libgui.a

我将此添加到gui / Makefile.am

libgui_a_LIBADD = $(srcdir)/kernel/libkernel.a

但是我收到以下错误

*** No rule to make target `kernel/libkernel.a', needed by `libgui.a'.  Stop.

所以我不明白如何正确链接libkernel.a

修改/解释

在gui /目录中,我有一个somegui.cpp文件,它使用内核/目录中的xclass.h。 所以为了解决这个问题,我问我该怎么办。

1 个答案:

答案 0 :(得分:0)

尝试使用非递归的automake来避免这些问题。

https://www.flameeyes.eu/autotools-mythbuster/automake/nonrecursive.html

Sidenode:引用编译对象时使用$(top_builddir)。否则,当srcdir!= builddir

时,您的代码将会中断

如果你真的必须递归,那么你可以将规则添加到gui / Makefile.am

$(top_builddir)/kernel/libkernel.a:
        cd $(top_builddir)/kernel && $(MAKE)

注意:如果要使用并行make(-j),还需要确保在src / Makefile.am中,子目录之间存在依赖关系

.PHONY kernel gui
kernel:
      cd kernel && $(MAKE)
gui: kernel
      cd gui && $(MAKE)