bazel - Bazel:如何解开配置 ac/c++ 构建的 81 种方法
问题描述
我正在编写一个带有任务的新 C/C++ 库。它是低级别的,因此需要能够针对 CPU、O/S 调整构建,无论库(或任务)是构建 opt、dbg 还是使用哪个网络库(例如通用 TCP、Solarflare、Mellanox、Infiniband) . 这似乎是一个理想的 Bazel 用例。
我有基本的 Bazel 工作,例如我可以构建示例任务、库和依赖项。到目前为止,效果很好。
现在,重点是:由于代码只是带有一些 C++ 的 C,因此构建一个全新的工具链似乎不切实际。Bazel 附带和/或可以在 GCC/Clang 上做的事情已经足够好了;大多数默认值都很好。我不能自定义它吗?不过,我需要一种简单的方法来完成以下任务:
- 允许开发人员选择他们的编译器,通常是 clang 或 gcc,带有版本
- 允许开发人员决定如何构建他们的代码,例如 x86-32 dbg 库,但 x86-32 opt 二进制文件。或相同的 64 位版本...
- 允许开发人员选择要链接的网络库,因此构建它而不是其他网络库
- 对于 dbg 构建,开发人员可能希望添加一个额外的编译标志,并确保它在构建库和任务时无处不在
- 将开发人员限制为有效配置。例如,如果我知道代码可以在 Intel 芯片 x86-32 位或 64 位上运行,但不支持 PPC 处理器……那么……开发人员可能需要为 x86 转很多转盘,最好在出现错误时停止当 cpu=ppc 时
哪种基本方法最好?
- 允许 Bazel 自动发现平台、工具链并指导开发人员根据任务对其进行修改?如何?
- 提供复制粘贴和编辑的自定义 c/c++ 工具链 .bzl 文件?
- 只关注 CROSSTOOL?
- 使用自定义平台和工具链文件运送库?
TIA
解决方案
推荐阅读
- flutter - 如何使百分比指示器在颤动中以编程方式更改颜色?
- mysql - from_base64() 不解码回原始文本
- azure - 使用 Azure CLI/Powershell 获取逻辑应用的托管标识 ObjectID
- c# - Can I change the use of two ? : shortcuts to use the new switch expression syntax?
- sql - 当设置ValidateOnSaveEnabled = false,而代码执行到一半并退出
- java - 如何在詹金斯管道中获取 {env.WORKSPACE} 的父目录
- android - Android 从 Adapter for API 21 在 TextView 中设置可绘制背景
- r - 查询 R 和主要和次要组件中的版本
- wordpress - 如何使用第三方 Rest API 在 woocommerce 中添加自定义付款方式
- c - C中的链表从void函数返回一个指针