使用automake来安装具有大量文件的数据目录树

| 我有一个数据目录,我希望automake为其生成安装和卸载目标。本质上,我只想将此目录原样复制到DATA目录,通常,我可能会单独列出所有文件,例如
dist_whatever_DATA=dir/subdir/filea ...
但是,当我的目录结构看起来像这样时,就会出现问题
*root
 *subdir
  *~10 files
 *subdir
  *~10 files
 *subdir
  *~700 files
 *subdir
 ...
 ~20 subdirs
我只是无法列出Makefile.am中包含的所有1000多个文件。那太荒谬了。 我还需要保留目录结构。我应该注意,这些数据根本不是由构建过程生成的,实际上实际上是很短的录音。因此,这并不是我想要自动制作“检查”实际上要创建的每个文件都已经创建,因为它们是否存在以及是否存在文件,我都知道我想要它要安装的文件以及没有安装的文件,都不应安装。我知道这是在其他地方不执行通配符安装的理由,但是所有可能的原因在这里都不适用。     
已邀请:
        我发现单独安装数百个文件会使ѭ2长时间折磨。我有一个类似的案例,我想安装数百个文件,保留目录结构,并且我不想每次将文件添加到集合中或从集合中删除时都更改Makefile.am。 我在分发中包含了文件的LZMA存档,并制定了如下自动制作规则:
GIANTARCHIVE = My_big_archive.tar.lz

dist_pkgdata_DATA = $(GIANTARCHIVE)

install-data-hook:
    cd $(DESTDIR)$(pkgdatadir); \\
    cat $(GIANTARCHIVE) | unlzma | $(TAR) --list > uninstall_manifest.txt; \\
    cat $(GIANTARCHIVE) | unlzma | $(TAR) --no-same-owner --extract; \\
    rm --force $(GIANTARCHIVE); \\
    cat uninstall_manifest.txt | sed --expression=\'s/^\\|$$/\"/g\' | xargs chmod a=rX,u+w

uninstall-local:
    cd $(DESTDIR)$(pkgdatadir); \\
    cat uninstall_manifest.txt | sed --expression=\'s/ /\\\\ /g\' | xargs rm --force; \\
    rm --force uninstall_manifest.txt
这样,automake将
My_big_archive.tar.lz
安装在
$(pkgdata)
目录中,并将其解压缩到该目录中,并列出其中的所有文件,以便以后可以卸载它们。即使您要自动生成该列表,这也比列出每个文件作为安装目标要快得多。     
        我将使用脚本来生成一个列出所有文件的
Makefile
片段:
echo \'subdir_files =\' > subfiles.mk
find subdir -type f -print | sed \'s/^/  /;$q;s/$/ \\\\/\' >> subfiles.mk
然后从您的主要
Makefile.am
包括this8ѭ:
include $(srcdir)/subfiles.mk
nobase_dist_pkgdata_DATA = $(subdir_files)
第二个选项是
EXTRA_DIST = subdir
,然后编写自定义
install-data-local
uninstall-local
规则。 这里的问题是,“ 11”将分发“ 15”中的所有文件,包括备份文件,配置文件(例如,来自VCS的文件)以及其他您不希望分发的文件。 使用上面的脚本,您可以过滤真正要分发的文件。     
        我会编写一个脚本(作为单独的shell脚本或在
Makefile.am
中),该脚本作为
install-data-hook
目标的一部分运行。     

要回复问题请先登录注册