在Buck中,如何扩展genrule输出目录?

时间:2017-01-12 12:02:09

标签: c++ buck

我有一个genrule,它输出一个包含C ++标题的目录。我还有一个cxx_library,它使用genrule的输出。 headers的{​​{1}}字段如下所示:

cxx_library

问题是我的C ++源文件包含如下标题:

  ...
  headers = [
    ':my-headers',
  ],
  ...

但是巴克准备这样的临时区域:

#include "my_header.h"

其中my-cxx-library#default,private-headers/out 是包含我生成的标头的文件夹的别名。

因此,为了使用标题,我必须像这样包含它们:

out

库不是我自己的,所以我不想更改源代码。相反,我想使用像#include "out/my_header.h" 这样的内容来包含subdir_glob内的所有内容。

我试过了:

:my-headers/out

但是,似乎这样做时,字符串 ... headers = subdir_glob([ (':my-headers/out', '**/*.h'), ]), ... 无法解析为:my-headers的输出路径。

retrofit2中是否有可以将规则扩展到其输出路径的函数?

1 个答案:

答案 0 :(得分:3)

isn't trivially possible today,但您可以使用以下解决方法:

genrule(
  name = 'headers',
  cmd = 'generate_headers.py --outdir=$OUT'
  out = 'headers-dir',
)
genrule(
  name = 'generated_header_A.h',
  cmd = 'cp $(location :headers)/genereated_header_A.h $OUT',
  out = 'generated_header_A.h',
)

然后,在cxx_library中,您只需要通过引用位置声明headers

  headers = {
    'some_namespace/header_A.h': ':generated_header_A.h',
  },

上面的代码假设所有这些都在同一个build file,但如果不是,则只需要使用完全限定的build target