嵌套文件夹的自动化 - 必须递归吗?

时间:2016-01-02 17:36:48

标签: autotools automake

我的项目目前有以下文件夹结构:

   .
   |-examples
   |-nbis
   |---bozorth3
   |-----include
   |-----src
   |-------bin
   |---------bozorth3
   |-------lib
   |---------bozorth3
   |-zfm20

我想用autotools构建它,所以我有一个包含该内容的文件Makefile.am

AUTOMAKE_OPTIONS = foreign
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = zfm20 examples nbis

我对zfm20examples没有任何问题。我的问题是关于文件夹nbis。以下是nbis/Makefile.am的样子:

BZ3_LIBDIR = bozorth3/src/lib/bozorth3/
BZ3_BINDIR = bozorth3/src/bin/bozorth3/
BZ3_INCLUDES = bozorth3/include/bozorth3.h bozorth3/include/bz_array.h

lib_LTLIBRARIES = libbozorth.la
libbozorth_la_SOURCES = $(BZ3_INCLUDES) $(BZ3_LIBDIR)bozorth3.c $(BZ3_LIBDIR)bz_alloc.c $(BZ3_LIBDIR)bz_drvrs.c $(BZ3_LIBDIR)bz_gbls.c $(BZ3_LIBDIR)bz_io.c $(BZ3_LIBDIR)bz_sort.c

bin_PROGRAMS = bozorth3
bozorth3_SOURCES = $(BZ3_INCLUDES) $(BZ3_BINDIR)bz3.c $(BZ3_BINDIR)usage.c
bozorth3_LDADD = libbozorth.la

但似乎没有这样的方式。这是make的输出:

Making all in nbis
make[2]: Entering directory '/home/pi/git/figure_fingerprint_sensor/nbis'
Makefile:382: .deps/bozorth3/src/bin/bozorth3/bz3.Po: Datei oder Verzeichnis nicht gefunden
Makefile:383: .deps/bozorth3/src/bin/bozorth3/usage.Po: Datei oder Verzeichnis nicht gefunden
Makefile:384: .deps/bozorth3/src/lib/bozorth3/bozorth3.Plo: Datei oder Verzeichnis nicht gefunden
Makefile:385: .deps/bozorth3/src/lib/bozorth3/bz_alloc.Plo: Datei oder Verzeichnis nicht gefunden
Makefile:386: .deps/bozorth3/src/lib/bozorth3/bz_drvrs.Plo: Datei oder Verzeichnis nicht gefunden
Makefile:387: .deps/bozorth3/src/lib/bozorth3/bz_gbls.Plo: Datei oder Verzeichnis nicht gefunden
Makefile:388: .deps/bozorth3/src/lib/bozorth3/bz_io.Plo: Datei oder Verzeichnis nicht gefunden
Makefile:389: .deps/bozorth3/src/lib/bozorth3/bz_sort.Plo: Datei oder Verzeichnis nicht gefunden
make[2]: *** No rule to make target '.deps/bozorth3/src/lib/bozorth3/bz_sort.Plo'.  Schluss.
make[2]: Leaving directory '/home/pi/git/figure_fingerprint_sensor/nbis'
Makefile:324: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/pi/git/figure_fingerprint_sensor'
Makefile:255: recipe for target 'all' failed
make: *** [all] Error 2

如果查看我所看到的文件夹.deps

$(BZ3_LIBDIR)bz_sort.Plo
$(BZ3_LIBDIR)bz_io.Plo
$(BZ3_LIBDIR)bz_gbls.Plo
$(BZ3_LIBDIR)bz_drvrs.Plo
$(BZ3_LIBDIR)bz_alloc.Plo
$(BZ3_LIBDIR)bozorth3.Plo
$(BZ3_BINDIR)usage.Po
$(BZ3_BINDIR)bz3.Po

我是否真的需要在每个嵌套文件夹中都有Makefile.am才能使其正常工作,或者我是否只是用变量搞砸了文件?

1 个答案:

答案 0 :(得分:0)

修改:这似乎是a bug in automake itself,无论您是否使用subdir-objects,都会发生这种情况,因此本回答中的说明实际上是错误的。正确的选择是停止使用_SOURCES列表中的变量,因为没有正确收集对象列表。

原始答案如下。

认为可以通过为automake启用subdir-objects选项来修复它。

configure.ac

AM_INIT_AUTOMAKE([subdir-objects])
以这种方式,而不是寻找.deps/bozorth3/src/lib/bozorth3/bz_sort.Plo,它会寻找bozorth3/src/lib/bozorth3/.deps/bz_sort.Plo