cmake - bazel 从 cmake 连接 find_package

标签 cmake bazel find-package

我正在尝试使用rules_foreign_cc 中的bazel 的cmake 来构建一个名为fcl 的库。该包的 CMakeLists.txt 中有一个 find_package(ccd QUIET) 语句。它想要找到ccd(或libccd)包。我也构建了该包,但仅使用 cc_library。如何获取 find_package 语句来查找我构建的包?

所以

cc_library(
    name = "libccd",
    visibility = ["//visibility:public"],
    include_prefix = "libccd/src",
    hdrs = [stuff],
    srcs = [stuff],
}

cmake(
    name = "fcl",
    cache_entries = {
        ?maybe this?
    },
    env_vars = {
        ?maybe this?
    },
    lib_source = "@fcl//:all",
    deps = [
        ":libccd",
    ],
)

最佳答案

I build that package as well, but just using cc_library. How can I get the find_package statement to find the package that I build?

你已经搬起石头砸自己的脚了。

fclfind_package 语句将使用此处记录的搜索过程来搜索名为 ccd-config.cmake 的文件: https://cmake.org/cmake/help/latest/command/find_package.html#config-mode-search-procedure

如果您有该文件,我建议将缓存变量 ccd_ROOT 设置为您安装了 ccd 的本地前缀。但由于您使用了 Bazel,该文件将不存在。

因此,您有三个选择:

  1. 使用 CMake 构建 ccd 以使其生成正确的包配置文件。
  2. 编写您自己的 Finddccd.cmake 查找模块,将 fcl 构建中的缓存变量 CMAKE_MODULE_PATH 设置为源树中的任意目录包含它。该查找模块必须定位 Bazel 生成的工件并复制上游 ccd 的接口(interface),包括变量和目标命名。
  3. fcl 编写 Bazel 构建。

编写查找模块非常很烦人,尤其是当上游努力创建 CMake 包配置文件时。不过,这里有这样做的文档:https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#a-sample-find-module

关于cmake - bazel 从 cmake 连接 find_package,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71060013/

相关文章:

CMake:find_package(..) 不搜索子目录

CMake IF(东西或其他东西)

unit-testing - 如何开始使用 GTest 和 CMake

android - CMAKE 不遵守来自 gradle 的标志以在 Android 上构建 NDK

cmake 对带有子目录的项目使用一个 cmakelist.txt

docker - 如何使用rules_oci通过Docker在本地运行镜像?

android - 在 Android 上运行 TensorFlow 模型

java - bazel run *_deploy.jar 失败并显示 "cannot execute binary file"