我正在尝试使用googletest转换现有的Buck测试用例。这似乎是使用cxx_test
构建目标直接进行的。
然而,在尝试构建时,我收到错误:
BUILD FAILED: .buckconfig: cxx:gtest_dep must be set
我的问题是.buckconfig
设置应该设置为什么? googletest回购路径?内置.so或.a文件?看一下源代码,它似乎需要成为另一个Buck构建目标。在某处有一个可行的Buck cxx_test
目标的例子吗?
答案 0 :(得分:4)
您应该指定一个build target,指向存储库中gtest库的位置。例如,您可以将其放在third-party/cxx/google-test
中,并且该目录中的BUCK
文件看起来像这样:
import os def subdir_glob(glob_specs): """ Given a list of tuples, the form of (relative-sub-directory, glob-pattern), return a dict of sub-directory relative paths to full paths. Useful for defining header maps for C/C++ libraries which should be relative the given sub-directory. """ results = {} for dirpath, glob_pattern in glob_specs: files = glob([os.path.join(dirpath, glob_pattern)]) for f in files: if dirpath: results[f[len(dirpath) + 1:]] = f else: results[f] = f return results cxx_library( name = 'google-test', srcs = glob(['src/**/*.cc'], excludes=['src/gtest-all.cc']), # Not all compilers support <tr1/tuple>, so have gtest use it's # internal implementation. exported_preprocessor_flags = [ '-DGTEST_USE_OWN_TR1_TUPLE=1', ], header_namespace = '', exported_headers = subdir_glob([ ('', 'src/**/*.h'), ('include', '**/*.h'), ]), deps = [ ':pthread', ], visibility = [ 'PUBLIC', ], ) # libpthread is implicitly included in the android runtime so, when building # on an android platform, we don't do anything. prebuilt_cxx_library( name = 'pthread', header_only = True, platform_linker_flags = [ ('android', []), ('', ['-lpthread']), ], visibility = [ 'PUBLIC', ], )
然后在您的.buckconfig
中,您将拥有以下内容:
[cxx] gtest_dep = //third-party/cxx/google-test:google-test
请注意,subir glob是Buck可能在将来提供的东西。