我正在转换到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
主要那样安装吗?
答案 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_DATA
和automake
。
如果您不想这样做,以下内容可能与您的第一个Makefile.am
代码段结合使用。我之前没有使用过git-annex,所以这可能是错的:
$(foo_DATA) :
if test ! -e $@; then git annex get $@; fi