我正在尝试使用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?
你已经搬起石头砸自己的脚了。
fcl
的 find_package
语句将使用此处记录的搜索过程来搜索名为 ccd-config.cmake
的文件: https://cmake.org/cmake/help/latest/command/find_package.html#config-mode-search-procedure
如果您有该文件,我建议将缓存变量 ccd_ROOT
设置为您安装了 ccd
的本地前缀。但由于您使用了 Bazel,该文件将不存在。
因此,您有三个选择:
- 使用 CMake 构建
ccd
以使其生成正确的包配置文件。 - 编写您自己的
Finddccd.cmake
查找模块,将fcl
构建中的缓存变量CMAKE_MODULE_PATH
设置为源树中的任意目录包含它。该查找模块必须定位 Bazel 生成的工件并复制上游 ccd 的接口(interface),包括变量和目标命名。 - 为
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/