首页 > 解决方案 > 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 版本吗?

谢谢!

标签: bazel

解决方案


您可能还需要适用于 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",
)

推荐阅读