将automake与源树中可能不存在的文件一起使用

时间:2014-09-23 20:32:21

标签: install autotools autoconf automake git-annex

我正在转换到git-annex,用于在我的git仓库中存储数据文件。使用git-annex,您可以克隆存储库并排除附件中的文件,直到您特别请求它们为止。因此,我试图创建一个系统,用户可以在 make 阶段中构建src树而不会出现git-annexed数据文件。目前,我们假设这些文件存在于用户文件系统中,因此下面的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)

但这非常hackey。我硬编码“安装”二进制文件和权限标志,而不是从配置脚本中获取它们。如果文件不存在,那么在 make 步骤期间,只需让automake不会失败,但在所有其他情况下的行为与预期一致。

TLDR:我是否可以使用_DATA主要文件定义一组文件,如果文件不存在,那么在 make 期间不会出错?但是如果它存在的话,它也会像_DATA主要那样安装吗?

1 个答案:

答案 0 :(得分:1)

您目前的做法似乎合理。我会将其写为install-data-local hook,但是:

data_files=datafile1 datafile2 datafile3

install-data-local:
    test -z $(foodir) || $(MKDIR_P) $(foodir)
    $(INSTALL_DATA) $(data_files) $(foodir)
MKDIR_P应为您设置

INSTALL_DATAautomake

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

$(foo_DATA) :
        if test ! -e $@; then git annex get $@; fi