1

我正在过渡到 git-annex 以在我的 git 存储库中存储数据文件。使用 git-annex,您可以克隆存储库并排除附件中的文件,直到您特别请求它们。所以,我试图创建一个系统,用户可以在其中构建 src 树,而在make阶段不存在 git 附加的数据文件。目前,我们假设文件存在于用户文件系统中,因此 Makefile.am 的以下片段就足够了:

foo_DATA=datafile1 datafile2 datafile3

EXTRA_DIST=$(foo_DATA)

但是,当使用_DATA主文件时,当用户尝试制作并且列表中的任何文件都不存在时会生成错误。所以我的问题是,有没有办法定义数据文件,以便在make期间数据文件不存在时不会生成错误,但如果文件在make install步骤期间存在,则其行为与上述代码完全相同?

我已经尝试_DATA完全避免初级,做一些简单的事情,如下所示:

data_files=datafile1 datafile2 datafile3

install:
    test -z $(foodir) || mkdir -p $(foodir)
    install -c -m 644 $(data_files) $(foodir)

但这很老套。我对“安装”二进制文件和权限标志进行硬编码,而不是从配置脚本中获取它们。如果文件不存在,Ide 宁愿让 automake 在make步骤中不会失败,但在所有其他情况下都按预期运行。

TLDR:如果文件不存在,我可以使用在生成期间不会出错的主文件定义一组文件_DATA?但是如果它存在的话,它也完全按照主节点的方式安装吗?_DATA

4

1 回答 1

1

您目前的方法似乎是合理的。不过,我会把它写成一个install-data-local 钩子

data_files=datafile1 datafile2 datafile3

install-data-local:
    test -z $(foodir) || $(MKDIR_P) $(foodir)
    $(INSTALL_DATA) $(data_files) $(foodir)

MKDIR_P并且INSTALL_DATA应该由automake.

如果您不想这样做,以下可能会与您的第一个Makefile.am片段结合使用。我以前没有使用过 git-annex,所以这可能是错误的:

$(foo_DATA) :
        if test ! -e $@; then git annex get $@; fi
于 2014-09-23T23:54:25.383 回答