1

我正在尝试将现有的googletest测试用例转换为使用Buck构建。cxx_test使用构建目标看起来很简单。

但是,在尝试构建时出现错误:

BUILD FAILED: .buckconfig: cxx:gtest_dep must be set

我的问题是该.buckconfig设置应该设置为什么?googletest repo 的路径?构建 .so 或 .a 文件?查看源代码,它似乎需要成为另一个 Buck 构建目标。cxx_test某处是否有工作 Buck 目标的示例?

4

1 回答 1

4

您应该指定一个构建目标,该目标指向您的存储库中 gtest 库的位置。例如,您可以将其放入third-party/cxx/google-test,您BUCK在该目录中的文件将如下所示:

导入操作系统
def subdir_glob(glob_specs):
  """
  给定一个元组列表,(relative-sub-directory, glob-pattern) 的形式,
  将子目录相对路径的字典返回到完整路径。对...有用
  为 C/C++ 库定义头映射,它应该是相对于给定的
  子目录。
  """

  结果 = {}

  对于 dirpath,glob_specs 中的 glob_pattern:
    文件 = glob([os.path.join(dirpath, glob_pattern)])
    对于文件中的 f:
      如果目录路径:
        结果[f[len(dirpath) + 1:]] = f
      别的:
        结果[f] = f

 返回结果

cxx_图书馆(
  名称 = '谷歌测试',
  srcs = glob(['src/**/*.cc'], excludes=['src/gtest-all.cc']),
  # 不是所有的编译器都支持 <tr1/tuple>,所以让 gtest 使用它
  # 内部实现。
  导出的预处理器标志 = [
    '-DGTEST_USE_OWN_TR1_TUPLE=1',
  ],
  header_namespace = '',
  导出的_headers = subdir_glob([
    ('', 'src/**/*.h'),
    ('包括', '**/*.h'),
  ]),
  部门= [
    ':pthread',
  ],
  能见度 = [
    '上市',
  ],
)

# libpthread 隐式包含在 android 运行时中,因此,在构建时
# 在安卓平台上,我们什么都不做。
prebuilt_cxx_library(
  名称 = 'pthread',
  header_only = 真,
  platform_linker_flags = [
    ('安卓', []),
    ('', ['-lpthread']),
  ],
  能见度 = [
    '上市',
  ],
)

然后在你的.buckconfig,你会有这个:

[cxx]
  gtest_dep = //第三方/cxx/google-test:google-test

请注意,subdir glob 是 Buck 将来可能提供的东西。

于 2015-04-22T21:16:14.203 回答