{"id":13460087,"url":"https://github.com/chen3feng/blade-build","last_synced_at":"2025-04-03T09:05:05.906Z","repository":{"id":4376241,"uuid":"5512937","full_name":"chen3feng/blade-build","owner":"chen3feng","description":"Blade is a powerful build system from Tencent, supports many mainstream programming languages, such as C/C++, java, scala, python, protobuf...","archived":false,"fork":false,"pushed_at":"2024-10-29T08:33:59.000Z","size":8136,"stargazers_count":2052,"open_issues_count":146,"forks_count":499,"subscribers_count":146,"default_branch":"master","last_synced_at":"2024-10-29T09:52:29.858Z","etag":null,"topics":["build-system","build-tool","cplusplus","java","monorepo","multilingual","ninja","protobuf","python","scala"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chen3feng.png","metadata":{"files":{"readme":"README-zh.md","changelog":"ChangeLog","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-08-22T17:35:13.000Z","updated_at":"2024-10-29T08:34:05.000Z","dependencies_parsed_at":"2023-10-14T15:45:42.985Z","dependency_job_id":"bdf7e8b2-4757-4131-9d28-84ca54c60b6d","html_url":"https://github.com/chen3feng/blade-build","commit_stats":{"total_commits":1088,"total_committers":48,"mean_commits":"22.666666666666668","dds":0.3759191176470589,"last_synced_commit":"ae4339e3d1a16c5da73e597eededf6fea436e17a"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chen3feng%2Fblade-build","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chen3feng%2Fblade-build/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chen3feng%2Fblade-build/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chen3feng%2Fblade-build/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chen3feng","download_url":"https://codeload.github.com/chen3feng/blade-build/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246970318,"owners_count":20862509,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build-system","build-tool","cplusplus","java","monorepo","multilingual","ninja","protobuf","python","scala"],"created_at":"2024-07-31T10:00:35.334Z","updated_at":"2025-04-03T09:05:05.879Z","avatar_url":"https://github.com/chen3feng.png","language":"Python","readme":"# Blade Build System\n\n[![license NewBSD](https://img.shields.io/badge/License-NewBSD-yellow.svg)](COPYING)\n[![Python](https://img.shields.io/badge/language-python2,3-blue.svg)](https://www.python.org/)\n[![Code Style](https://img.shields.io/badge/code%20style-google-blue.svg)](https://google.github.io/styleguide/pyguide.html)\n[![Platform](https://img.shields.io/badge/platform-linux%20%7C%20macos-lightgrey.svg)](doc/zh_CN/prerequisites.md)\n\n```text\n██████╗ ██╗      █████╗ ██████╗ ███████╗\n██╔══██╗██║     ██╔══██╗██╔══██╗██╔════╝\n██████╔╝██║     ███████║██║  ██║█████╗\n██╔══██╗██║     ██╔══██║██║  ██║██╔══╝\n██████╔╝███████╗██║  ██║██████╔╝███████╗\n╚═════╝ ╚══════╝╚═╝  ╚═╝╚═════╝ ╚══════╝\n```\n\nBlade是一个方便易用高性能的现代化代码构建系统，特别适合公司内的大规模代码库的敏捷构建，内置了对多种编程语言及单元测试框架的直接支持。\n\nBlade is an easy-to-use, fast and modern build system for trunk based development in large scale monorepo codebase. It supports building mulitiple programming languages.\n\n[English](README.md) | 简体中文\n\n## Build Status\n\n[![Build Status](https://travis-ci.org/chen3feng/blade-build.svg?branch=master)](https://travis-ci.org/chen3feng/blade-build)\n[![codebeat badge](https://codebeat.co/badges/e0d861b7-47cc-4023-9784-7d54246a3576)](https://codebeat.co/projects/github-com-chen3feng-blade-build-master)\n[![Coverage](https://coveralls.io/repos/chen3feng/blade-build/badge.svg?branch=master)](https://coveralls.io/github/chen3feng/blade-build)\n[![Downloads](https://img.shields.io/github/downloads/chen3feng/blade-build/total.svg)](https://github.com/chen3feng/blade-build/releases)\n\n## 演示\n\n我们先来看一个漂亮的演示：\n\n[![asciicast](https://asciinema.org/a/o9uQ2uia4OVqghXUid7XSNjv1.svg)](https://asciinema.org/a/o9uQ2uia4OVqghXUid7XSNjv1)\n\n## 发布\n\nmaster 分支上的代码是开发版，应当视为 alpha 版。正式环境请优先考虑使用 tag 上的版本。我们会不定期地把内部大规模代码库上验证过的版本发布到 tag 上。\n\n* Blade 发布2.0，包含以下特性：\n  * python 最低版本要求2.7，并支持 python 3\n  * 对 Java，scala 构建的完善支持\n  * 全面支持Python构建\n  * 支持自定义扩展\n  * 后端只支持[ninja](doc/zh_CN/config.md#global_config)构建系统，大幅度提高构建性能\n\n具体请查看[升级说明](doc/zh_CN/upgrade-to-v2.md)。\n\n## Stargazers over time\n\n[![Stargazers over time](https://starchart.cc/chen3feng/blade-build.svg)](https://starchart.cc/chen3feng/blade-build)\n      \n## 源起\n\nBlade 是一个现代构建系统，期望的目标是强大而好用，把程序员从构建的繁琐中解放出来。\n\nBlade主要定位于linux下的大型C++项目，密切配合研发流程，比如单元测试，持续集成，覆盖率统计等。\n但像unix下的文本过滤程序一样，保持相对的独立性，可以单独运行。目前重点支持i386/x86_64 Linux，未来可以考虑支持其他的类Unix系统。\n\n在[腾讯公司“台风”云计算平台](http://storage.it168.com/a2011/1203/1283/000001283196.shtml)开发过程中，为了解决 GNU Make，\nAutotools 的难用和繁琐的问题，参考[Google工程博客上的一些文章](http://google-engtools.blogspot.hk/2011/08/build-in-cloud-how-build-system-works.html)，我们开发了这个全新的构建系统，整个系统基于多个声明式的构建脚本，在构建脚本里，\n只需要声明要构建什么目标，目标的源代码，以及其直接依赖的其它目标，不需要说明如何构建。大大降低了使用难度，提高了开发效率。\n\n2012年，Blade对外开源，成为腾讯公司最早的开源项目。目前已经广泛应用于腾讯广告系统、微信后台服务、腾讯游戏后台服务、腾讯基础架构，以及小米，百度，爱奇艺等其他公司，也收到了来自公司内外的多个Pull Requests。\n\n代码开源后，托管到googlecode上，因后来googlecode关闭，迁移到chen3feng个人git仓库继续维护。\n\n## 为何而生\n\n首先，Blade解决了依赖问题。\n当你在构建某些目标时，头文件有变化，会自动重新构建。\n最方便的是，Blade也能追踪库文件的依赖关系。比如\n库 foo 依赖库 common，那么在库 foo 的 BUILD 文件中列入依赖：\n\n```python\ncc_library(\n    name = 'foo',\n    srcs = ...,\n    hdrs = ...,\n    deps = ':common'\n)\n```\n\n那么对于使用foo的程序，如果没有直接用到common，那么就只需要列出foo，并不需要列出common。\n\n```python\ncc_binary(\n    name = 'my_app',\n    srcs = ...,\n    deps = ':foo'\n)\n```\n\n这样当你的库实现发生变化，增加或者减少库时，并不需要通知库的用户一起改动，Blade自动维护这层间接的依赖关系。当构建my_app时，也会自动检查foo和common是否也需要更新。\n\n说到易用性，除了依赖关系的自动维护，Blade还可以做到，用户只需要敲一行命令，就能把整个目录树的编译链接和单元测试全部搞定。例如：\n\n递归构建和测试common目录下所有的目标\n\n```bash\nblade test common...\n```\n\n以32位模式构建和测试\n\n```bash\nblade test -m32 common...\n```\n\n以调试模式构建和测试\n\n```bash\nblade test -pdebug common...\n```\n\n显然，你可以组合这些标志\n\n```bash\nblade test -m32 -pdebug common...\n```\n\n## 特点\n\n* 自动分析头文件依赖关系，构建受影响的代码。\n* 增量编译和链接，只构建因变更受影响而需要重新构建的代码。\n* 自动计算库的间接依赖，库的作者只需要写出直接依赖，构建时自动检查所依赖的库是否需要重新构建。\n* 在任意代码树的任意子目录下都能构建。\n* 支持一次递归构建多个目录下的所有目标，也支持只构建任意的特定的目标。\n* 无论构建什么目标，这些目标所依赖的目标也会被自动连坐更新。\n* 内置 debug/release 两种构建类型。\n* 彩色高亮构建过程中的错误信息。\n* 支持 ccache\n* 支持 distcc\n* 支持基于构建多平台目标\n* 支持构建时选择编译器（不同版本的gcc，clang等）\n* 支持编译 protobuf，lex, yacc, swig\n* 支持自定义规则\n* 支持测试，在命令行跑多个测试\n* 支持并行测试（多个测试进程并发运行）\n* 支持增量测试（无需重新运行的测试程序自动跳过）\n* 集成 gperftools，自动检测测试程序的内存泄露\n* 构建脚本 vim 语法高亮\n* svn 式的子命令命令行接口。\n* 支持 bash 命令行补全\n* 用 python 编写，无需编译，直接安装使用。\n\n彻底避免以下问题：\n\n* 头文件更新，受影响的模块没有重新构建。\n* 被依赖的库需要更新，而构建时没有被更新，比如某子目录依\n\n## 文档\n\n看到这里，你应该觉得Blade是个不错的工具，那么，阅读[完整文档](doc/zh_CN/README.md)，开始使用吧。\n\n如果遇到有问题，可以试试先查一下[FAQ](doc/zh_CN/FAQ.md)，也许有你需要的信息。\n\n## 贡献者\n\n[![Contributers](https://contrib.rocks/image?repo=chen3feng/blade-build)](https://github.com/chen3feng/blade-build/graphs/contributors)\n\n## 致谢\n\n* Blade 是受 Google 官方博客发表的这篇文章启发而开发的：\n  [云构建：构建系统是如何工作的](http://google-engtools.blogspot.hk/2011/08/build-in-cloud-how-build-system-works.html)。\n  后来在 2015 年，他们把部分重写后系统的以 `bazel` 的新名字开源。\n* Blade 生成 [Ninja](https://ninja-build.org/) 脚本进行构建，因此 Blade 的运行还需要依赖 Ninja。\n* [Python](http://www.python.org) 是一种简单易用而又强大的语言，我们喜欢python。\n* Google 开放的一些库强大而好用，我们很喜欢，我们把对这些库的支持集成进了Blade中，既方便了库的使用，\n又增强了 Blade，这些库包括：\n  [glog](http://code.google.com/p/google-glog/),\n  [protobuf](http://code.google.com/p/protobuf/),\n  [gtest](http://code.google.com/p/googletest/),\n  [gperftools](http://code.google.com/p/gperftools/)。\n\n我们的理念：解放程序员，提高生产力。用工具来解决非创造性的技术问题。\n\n欢迎使用以及帮助我们改进Blade，我们期待你的贡献。\n\n\n","funding_links":[],"categories":["Python","语言资源库"],"sub_categories":["python"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchen3feng%2Fblade-build","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchen3feng%2Fblade-build","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchen3feng%2Fblade-build/lists"}