将 CMake 项目集成到 Buck 中的最佳方式是什么?

What is the best way to integrate a CMake project into Buck?

我在自己的 C++ 项目中使用 Buck,但我依赖于使用 CMake 构建的第三方库。 CMake 文件很复杂,所以我认为在 Buck 中重新创建他们的 CMake 文件不切实际。相反,我想从 Buck 调用 CMake。

从 Buck 调用 CMake 的最佳方式是什么?

我应该如何构建我的项目以尽量减少麻烦?

我的建议是使用 genrule 和 prebuilt_cxx_library。

这是我使用 Google Test 的 Buck 研究项目: https://github.com/ar90n/lab/tree/master/sandbox/buck-study/gtest

该项目包含两个 Buck 文件。一个 (./gtest/BUCK) 用于获取和构建 Google 测试。另一个 (./BUCK) 用于构建和 运行ning 测试程序。

如果你想构建和运行这个项目,请执行以下命令,

$ buck fetch //gtest:googletest-src
$ buck build :sample1
$ buck run :sample1

调用 CMake 会破坏重现性,因此这不是最佳方法。相反,请尝试以下操作:

  1. fork 使用 CMake 构建的项目。
  2. 调用 CMake 生成任何头文件。
  3. 将头文件保存在项目中的某个位置(例如 /cmake-generated)。
  4. 为 CMake 生成的头文件创建一个仅包含头文件的库。
  5. 根据 CMake 库,使用 Buck 构建项目的其余部分。
  6. 将所有内容提交给 Git。
  7. 为您需要的每个目标重复步骤 2。

这不如真正的 Buck 端口好,但您可以通过一次性手动步骤获得大部分好处。