代码之家  ›  专栏  ›  技术社区  ›  Danny Lo

嵌套文件夹的自动生成-递归是必须的吗?

  •  1
  • Danny Lo  · 技术社区  · 9 年前

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

       .
       |-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
    

    我真的需要一个 生成文件.am 在每个嵌套的文件夹中运行,还是我只是用变量弄乱了文件?

    1 回复  |  直到 9 年前
        1
  •  0
  •   Diego Elio Pettenò    9 年前

    编辑 :这似乎是 a bug in automake itself ,无论您使用 subdir-objects 或者没有,所以这个答案中的说明实际上是错误的。正确的选择是停止在 _SOURCES 列表,因为对象列表未正确收集。

    原始答案如下。

    认为 通过启用 细分对象 自动生成选项。

    在里面 configure.ac :

    AM_INIT_AUTOMAKE([subdir-objects])
    

    这样做而不是寻找 .deps/bozorth3/src/lib/bozorth3/bz_sort.Plo 它会寻找 bozorth3/src/lib/bozorth3/.deps/bz_sort.Plo .