我的项目目前有以下文件夹结构:
.
|-examples
|-nbis
|---bozorth3
|-----include
|-----src
|-------bin
|---------bozorth3
|-------lib
|---------bozorth3
|-zfm20
我想用autotools构建它,所以我有一个包含该内容的文件Makefile.am
:
AUTOMAKE_OPTIONS = foreign
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = zfm20 examples nbis
我对zfm20
和examples
没有任何问题。我的问题是关于文件夹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
才能使其正常工作,或者我是否只是用变量搞砸了文件?
答案 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
。