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

标签 c++ buck

我有一个 genrule 输出一个包含 C++ 头文件的目录。我还有一个 cxx_library,它使用 genrule 的输出。 cxx_libraryheaders 字段如下所示:

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

问题是我的 C++ 源文件包含这样的 header :

#include "my_header.h"

但是 Buck 是这样准备暂存区的:

my-cxx-library#default,private-headers/out

out 是包含我生成的 header 的文件夹的别名。

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

#include "out/my_header.h"

该库不是我自己的,所以我不想更改源代码。相反,我想使用类似 subdir_glob 的东西来包含 :my-headers/out 中的所有内容。

我试过这个:

  ...
  headers = subdir_glob([
    (':my-headers/out', '**/*.h'),
  ]),
  ...

但是,似乎以这种方式完成后,字符串 :my-headers 并未解析为 :my-headers 的输出路径。

中有函数吗可以将规则扩展到它的输出路径?

最佳答案

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相反。

关于c++ - 在 Buck 中,如何扩展 genrule 输出目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41612753/

相关文章:

c++ - 如何使用 BUCK 仅运行特定的 C++ gtest

c++ - 从 Buck 调用 Google Test 时可以添加启用颜色吗?

react-native - 如何使用buck构建适用于iOS和Android的React-native应用程序

android - OkBuck 和 Realm 的问题

c++ - 如何在 OpenGL 中创建 "Concave/Convex Circle Illusion"

c++ - 配置 VS2010 以将 C++ 项目构建到一个相当干净的输出目录?

c++ - 使用基类对象来表示其派生类对象

c++ - c++中基于大型决策树的人工智能设计模式

c++ - 在嵌套的 boost 绑定(bind)中使用模板函数

ios - 如何在降压构建上运行 xcconfig