rules_foreign_cc终极指南:如何在Bazel中无缝集成CMake、Make等外部构建系统
rules_foreign_cc终极指南如何在Bazel中无缝集成CMake、Make等外部构建系统【免费下载链接】rules_foreign_ccBuild rules for interfacing with foreign (non-Bazel) build systems (CMake, configure-make, GNU Make, boost, ninja, Meson)项目地址: https://gitcode.com/gh_mirrors/ru/rules_foreign_ccrules_foreign_cc是一套强大的构建规则能够帮助开发者在Bazel项目中无缝集成使用CMake、Make、Meson等非Bazel构建系统的C/C项目。通过这套规则你可以在Bazel的沙箱环境中构建外部项目并像使用普通cc规则一样在Bazel项目中使用它们。为什么选择rules_foreign_cc在现代C/C开发中很多成熟的开源项目使用CMake、Make等传统构建系统。直接将这些项目迁移到Bazel既耗时又容易出错而rules_foreign_cc提供了一种完美的中间方案无需迁移现有代码保留原有的构建系统和配置文件享受Bazel优势利用Bazel的增量构建、缓存和依赖管理支持多种构建系统兼容CMake、Make、Meson、Ninja等主流工具沙箱环境构建确保构建过程的可重复性和隔离性快速开始安装与配置使用Bzlmod推荐对于使用Bzlmod的项目只需在MODULE.bazel中添加以下内容bazel_dep(name rules_foreign_cc, version {version})rules_foreign_cc会自动注册默认工具链无需额外配置。你可以通过bzlmod hub-and-spoke了解更多高级配置选项或参考bzlmod示例获取可直接复制的配置模板。使用WORKSPACE如果你的项目仍在使用WORKSPACE文件添加以下内容load(bazel_tools//tools/build_defs/repo:http.bzl, http_archive) http_archive( name rules_foreign_cc, # 获取最新版本信息和sha256值 # 从发布页面: https://github.com/bazel-contrib/rules_foreign_cc/releases strip_prefix rules_foreign_cc-{release_archive}, url https://github.com/bazel-contrib/rules_foreign_cc/archive/{release_archive}.tar.gz, ) load(rules_foreign_cc//foreign_cc:repositories.bzl, rules_foreign_cc_dependencies) rules_foreign_cc_dependencies()rules_foreign_cc_dependencies宏提供了多种配置选项可精细控制构建阶段使用的工具链详情请参阅其文档。核心功能与使用示例CMake项目集成rules_foreign_cc提供了专门的CMake构建规则简化了CMake项目的集成过程。基本用法如下cmake( name my_cmake_lib, lib_source :my_cmake_project, cache_entries { CMAKE_BUILD_TYPE: Release, BUILD_SHARED_LIBS: ON, }, generate_args [-G Ninja], )关键参数说明build_args传递给CMake构建命令的参数cache_entries通过-Dkeyvalue形式传递给CMake的缓存变量env_vars设置环境变量如额外的CXXFLAGSgenerate_argsCMake生成命令的参数如指定生成器-G Ninja默认情况下Linux和macOS使用Unix Makefiles生成器Windows使用Ninja生成器。你可以通过generate_args显式指定生成器。Make项目集成对于使用GNU Make的项目rules_foreign_cc提供了make规则make( name my_make_lib, lib_source :my_make_project, make_commands [ make -j$(nproc), make install, ], env_vars { CXXFLAGS: -O2, }, )这个规则会调用GNU Make命令并根据Bazel的C/C工具链设置编译和链接相关的环境变量。Meson和Ninja支持rules_foreign_cc同样支持Meson构建系统和Ninja构建工具meson( name my_meson_lib, lib_source :my_meson_project, meson_args [--buildtyperelease], ninja_args [-j4], )Ninja规则可以单独使用适用于已有Ninja构建文件的项目ninja( name my_ninja_lib, lib_source :my_ninja_project, build_dir build, args [-j4], )高级配置与最佳实践交叉编译设置rules_foreign_cc支持交叉编译只需设置相应的缓存变量cmake( name my_cross_lib, lib_source :my_project, generate_crosstool_file True, cache_entries { CMAKE_SYSTEM_NAME: Linux, CMAKE_SYSTEM_PROCESSOR: arm, CMAKE_C_COMPILER: arm-linux-gnueabihf-gcc, }, )当generate_crosstool_file设为True时会根据工具链值、缓存条目和环境变量生成CMake交叉工具链文件。工具链管理rules_foreign_cc提供了灵活的工具链管理机制。你可以通过以下方式自定义工具链版本rules_foreign_cc_dependencies( cmake_version 3.25.0, make_version 4.4.1, ninja_version 1.11.1, )并行构建配置可以通过Bazel标志控制并行构建行为bazel build //my/project --rules_foreign_cc//foreign_cc/settings:parallelism_overcommit实际案例与示例项目rules_foreign_cc仓库中提供了多个示例项目展示了不同构建系统的集成方法CMake示例包含静态库、共享库和可执行文件的CMake项目Make示例简单的Makefile项目Ninja示例使用Ninja构建的项目Meson示例基本的Meson项目这些示例可以作为你集成自己项目的起点提供了可直接参考的BUILD文件配置。故障排除与常见问题构建缓存问题如果遇到构建缓存相关问题可以尝试清理Bazel缓存bazel clean --expunge工具链版本冲突如果项目需要特定版本的构建工具可以在rules_foreign_cc_dependencies中显式指定版本rules_foreign_cc_dependencies( cmake_version 3.20.0, # 固定CMake版本 )环境变量传递如需传递额外的环境变量可以使用env_vars参数cmake( name my_lib, lib_source :my_src, env_vars { LD_LIBRARY_PATH: /path/to/custom/libs, CMAKE_PREFIX_PATH: /path/to/custom/prefix, }, )总结rules_foreign_cc为Bazel用户提供了与外部C/C构建系统无缝集成的强大能力。无论是CMake、Make、Meson还是Ninja项目都可以通过简单的配置将其整合到Bazel的构建流程中充分利用Bazel的优势同时保留现有的构建系统。通过本文介绍的安装配置、基本用法和高级技巧你应该能够快速上手rules_foreign_cc并解决实际项目中遇到的集成问题。更多详细信息和高级用法请参考官方文档rules.md。开始使用rules_foreign_cc让Bazel成为你所有C/C项目的统一构建系统吧【免费下载链接】rules_foreign_ccBuild rules for interfacing with foreign (non-Bazel) build systems (CMake, configure-make, GNU Make, boost, ninja, Meson)项目地址: https://gitcode.com/gh_mirrors/ru/rules_foreign_cc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

从入门到精通:Terminus健康检查API全解析

从入门到精通:Terminus健康检查API全解析

从入门到精通:Terminus健康检查API全解析 【免费下载链接】terminus Terminus module for Nest framework (node.js) :robot: 项目地址: https://gitcode.com/gh_mirrors/terminus3/terminus Terminus是Nest框架的健康检查模块,为Node.js应用提供…

2026/9/28 3:14:46 阅读更多 →
Windows文件资源管理器的3D革命:STL缩略图预览如何改变你的工作流

Windows文件资源管理器的3D革命:STL缩略图预览如何改变你的工作流

Windows文件资源管理器的3D革命:STL缩略图预览如何改变你的工作流 【免费下载链接】STL-thumbnail Shellextension for Windows File Explorer to show STL thumbnails 项目地址: https://gitcode.com/gh_mirrors/st/STL-thumbnail 你是否曾经在寻找特定STL文…

2026/10/7 13:27:14 阅读更多 →
如何快速部署QNAP云盘管理工具:终极整合解决方案

如何快速部署QNAP云盘管理工具:终极整合解决方案

如何快速部署QNAP云盘管理工具:终极整合解决方案 【免费下载链接】qnap-openlist-webdav 一款挂载多个云盘的工具 项目地址: https://gitcode.com/gh_mirrors/qn/qnap-openlist-webdav 你是否厌倦了在阿里云盘、百度网盘、OneDrive等多个云存储平台间来回切换…

2026/10/4 16:14:07 阅读更多 →

最新新闻

DeepSeek-V3 部署与微调实战:MoE 显存账、vLLM 与 LoRA 避坑指南

DeepSeek-V3 部署与微调实战:MoE 显存账、vLLM 与 LoRA 避坑指南

简介:面向深度学习开发者的DeepSeek-V3配套资源包,聚焦模型推理、权重转换与部署场景,也适合关注深度搜索、数据分析与机器学习方向的进阶学习者。压缩包共17个文件,包含Python脚本(模型定义、fp8精度转换、文本生成&a…

2026/10/11 7:54:04 阅读更多 →
Altium Designer AD13安装与License配置实战指南

Altium Designer AD13安装与License配置实战指南

简介:AD13安装包及解锁文件面向电子设计自动化(EDA)领域的工程师与硬件学习者,适合需要在个人电脑上安装Altium Designer 13进行原理图绘制、PCB布局布线、封装设计及仿真验证的入门至中级用户。该版本长期被众多开发者使用&#…

2026/10/11 7:54:04 阅读更多 →
端侧Pose后处理实战:从输出Tensor到人体关键点解码全解析

端侧Pose后处理实战:从输出Tensor到人体关键点解码全解析

1. 从一堆浮点数到"看得懂的人":Pose 后处理到底卡在哪如果你已经跑通了端侧模型推理,拿到了输出 Tensor,恭喜你,最"玄学"的部分才刚刚开始。模型吐出来的东西,本质上就是一堆形状为[1, C, H, W]或…

2026/10/11 7:54:04 阅读更多 →
高效筛选arXiv计算机视觉论文:每日汇总实战指南

高效筛选arXiv计算机视觉论文:每日汇总实战指南

做 arXiv 的 cs.CV 板块每日论文汇总,这件事我从很早之前就开始断断续续地做,中间换过好几版模板,也踩过不少坑。今天这份是 2026 年 10 月 2 日的汇总,标题写的是“汇总-2026.10.02-计算机视觉论文”,其实就是把当天新…

2026/10/11 7:54:04 阅读更多 →
人体姿态检测实战:从YOLOv8+Lite-HRNet到业务规则引擎

人体姿态检测实战:从YOLOv8+Lite-HRNet到业务规则引擎

简介:本资源是一套基于Python实现的人体姿态估计实战代码包,面向人工智能初学者、计算机视觉方向学生及算法工程师,解决人体关键点检测这一典型CV任务的快速上手与工程复现问题。压缩包共7个文件,含2张测试图像(jpg&am…

2026/10/11 7:54:04 阅读更多 →
【单片机毕业设计】基于单片机的自行车骑行定位与运动数据监测装置设计 基于物联网的骑行速度里程与定位追踪监测系统设计(030205)

【单片机毕业设计】基于单片机的自行车骑行定位与运动数据监测装置设计 基于物联网的骑行速度里程与定位追踪监测系统设计(030205)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/11 7:53:04 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →