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

时间:2017-11-14 18:40:21

标签: autotools automake datadirectory

我们的测试数据由两个文件夹组成。我们有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的前缀?

2 个答案:

答案 0 :(得分:3)

这是nobase前缀的发明。该名称代表“不要调用basename”,用作:

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

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

答案 1 :(得分:1)

  

我的问题是,我们如何在安装期间保留TestData或TestVectors的前缀?

通常,Automake会计算每个目标的基本名称,并在安装时使用该名称直接将文件记录在指定目录中。如果目标名称包含要传播到已安装映像中的目录前缀,则可以通过在相关目标变量上使用 SELECT Tenant, Name, DBName, MAX( CASE WHEN Server = 'local' and Type = 'full' THEN Date END) as FullLocalDate, MAX( CASE WHEN Server = 'local' and Type = 'log' THEN Date END) as LogLocalDate, MAX( CASE WHEN Server = 'azure' and Type = 'full' THEN Date END) as FullAzureDate, MAX( CASE WHEN Server = 'azure' and Type = 'log' THEN Date END) as LogAzureDate FROM #Results r GROUP BY Tenant, Name, DBName 前缀来告知Automake。这可以与其他前缀组合,例如SELECT T3.* FROM table_1_2_join T12 /* replace this placeholder table with the select statement that joins your 2 tables */ JOIN table_3 T3 ON T3.City = T12.city AND T3.state = T12.state 。例如,

nobase_

section 3.3 of the Automake manual中描述了一般的前缀,section 12.1 of the Automake manual中详细说明了dist_