使用 dist_pkgdata_DATA 时保留数据文件前缀?

Preserve data file prefix when using dist_pkgdata_DATA?

我们的测试数据分为两个文件夹。我们有TestData/TestVectors/,取决于数据的形式:

- TestData
  |
  + a.dat
  + b.dat
  + ...

- TestVector
  |
  + x.vec
  + y.vec
  + ...

Our Makefile.am 有:

dist_pkgdata_DATA = \
   $(testdata_FILES) \
   $(testvector_FILES)

testdata_FILES = \
   TestData/a.dat TestData/b.dat \
   ...

testvector_FILES = \
   TestVectors/x.vec TestVectors/y.vec \
   ...

Automake 将它们安装在 @datadir@/@PACKAGE@/ 中,但我们在安装时丢失了 TestDataTestVectors 前缀。也就是说,一旦安装,所有文件都集中在一起:

- @datadir@/@PACKAGE@/
  |
  + a.dat
  + b.dat
  + ...
  + x.vec
  + y.vec
  + ...

Install arbitrary data files in arbitrary locations with Automake? 上有一个非常相似的问题,但我不太明白需要做什么才能确保 make install 按预期工作。

我的问题是,我们如何在安装过程中保留 TestDataTestVectors 的前缀?

这就是发明 nobase 前缀的目的。该名称代表 "don't call basename" 并且可以像这样使用:

nobase_dist_pkgdata_DATA = \
    $(testdata_FILES) \
    $(testvector_FILES)

这应该会导致列出的文件在安装树中保留其目录名称。

My question is, how do we preserve the prefix of TestData or TestVectors during install?

通常,Automake 会计算每个目标的基本名称,并在安装时使用它来将文件直接记录在指定目录中。如果目标名称包含要传播到已安装映像的目录前缀,那么您可以通过在相关目标变量上使用 nobase_ 前缀来告诉 Automake。这可以与其他前缀组合,例如 dist_。例如,

nobase_dist_pkgdata_DATA = \
   $(testdata_FILES) \
   $(testvector_FILES)

section 3.3 of the Automake manual, and nobase_ in particular is detailed in section 12.1 of the Automake manual中描述了一般的前缀。