bazel - Bazel rules_foreign_cc - 在构建时使用从源代码构建的 cmake 二进制文件
问题描述
我正在尝试运行使用 rules_foreign_cc 的 cmake_external 规则的 Bazel 构建。我的理解是,通过将正确的参数传递给 rules_foreign_cc_dependencies(...) 工作区函数,我可以指示构建使用 cmake 的预构建版本,而不是使用本地安装在构建服务器上的 cmake。
我试过以下无济于事:
rules_foreign_cc_dependencies(
["//:built_cmake_toolchain"],
False,
)
其中built_cmake_toolchain
定义如下:
toolchain(
name = "built_cmake_toolchain",
exec_compatible_with = [
"@bazel_tools//platforms:osx",
"@bazel_tools//platforms:x86_64",
],
toolchain = "@rules_foreign_cc//tools/build_defs/native_tools:built_cmake",
toolchain_type = "@rules_foreign_cc//tools/build_defs:cmake_toolchain",
)
,但在构建过程中出现“没有为类型@rules_foreign_cc//tools/build_defs:cmake_toolchain 找到匹配的工具链”错误。
有人知道在使用 rules_foreign_cc 的 external_cmake 规则时如何使用非本地安装的 cmake 版本吗?
谢谢!
解决方案
您可能还需要适用于 Linux 平台的 ninja 工具。我对这个配置很幸运:
工作空间
rules_foreign_cc_dependencies(
native_tools_toolchains = [
":built_cmake_toolchain_linux",
":built_cmake_toolchain_osx",
":built_ninja_toolchain_linux",
":built_ninja_toolchain_osx",
],
register_default_tools = False,
)
建造
toolchain(
name = "built_cmake_toolchain_linux",
exec_compatible_with = [
"@bazel_tools//platforms:linux",
"@bazel_tools//platforms:x86_64",
],
toolchain = "@rules_foreign_cc//tools/build_defs/native_tools:built_cmake",
toolchain_type = "@rules_foreign_cc//tools/build_defs:cmake_toolchain",
)
toolchain(
name = "built_cmake_toolchain_osx",
exec_compatible_with = [
"@bazel_tools//platforms:osx",
"@bazel_tools//platforms:x86_64",
],
toolchain = "@rules_foreign_cc//tools/build_defs/native_tools:built_cmake",
toolchain_type = "@rules_foreign_cc//tools/build_defs:cmake_toolchain",
)
toolchain(
name = "built_ninja_toolchain_linux",
exec_compatible_with = [
"@bazel_tools//platforms:linux",
"@bazel_tools//platforms:x86_64",
],
toolchain = "@rules_foreign_cc//tools/build_defs/native_tools:built_ninja",
toolchain_type = "@rules_foreign_cc//tools/build_defs:ninja_toolchain",
)
toolchain(
name = "built_ninja_toolchain_osx",
exec_compatible_with = [
"@bazel_tools//platforms:osx",
"@bazel_tools//platforms:x86_64",
],
toolchain = "@rules_foreign_cc//tools/build_defs/native_tools:built_ninja",
toolchain_type = "@rules_foreign_cc//tools/build_defs:ninja_toolchain",
)
推荐阅读
- javascript - 在函数调用中在 javascript 中声明 let 变量
- jsp - JSP 中的 JDBC 连接
- mongodb - MongoDB Importer - 将所有数据作为一个文档导入
- typo3 - 灵活内容中的 Typo3 错误消息 - 下载链接
- mysql - 为什么这个 MYSQL CASE 不起作用?
- javascript - Jquery Datatables 客户端优化
- javascript - antd上传控件需要action函数,但我不需要
- authentication - 即使有测试号码,Flutter firebase auth 电话身份验证也会失败
- ios - 与 iOS 的条纹集成
- javascript - 如何在没有 API 调用的情况下设置 Vuex 数据?