我有以下目录结构
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
。
所以为了解决这个问题,我问我该怎么办。
答案 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)