broc是一款面向c/c++语言的构建工具,提供了编译、分支依赖、依赖模块下载等功能。不同于make, cmake等以库文件链接的编译方式,broc将依赖库源代码与程序源代码一并同时进行编译,这种方式可以避免程序源代码与依赖库编译选项或平台不一致导致的软件兼容性问题;broc支持编译结束后自动运行单元测试用例;借助Jenkins broc还能完成软件的持续集成。
优势
源码编译
broc支持将程序以及依赖库从源码状态进行编译,解决了c/c++程序因编译选项、操作系统平台或库文件版本不同而造成的兼容性问题;
代码自动下载
broc支持自动checkout[依赖模块][4]源代码到本地然后进行编译,用户无需编写控制脚本来实现此功能;
分支依赖
broc支持指定依赖库的主干、分支和TAG,broc能自动识别并解决库文件传递性依赖问题;
语法简单
Makefile复杂的语法让人望而却步,而broc语法简洁,易上手;
增量编译靠谱
make通过文件的修改时间来判断文件是否需要进行再编译,当文件版本回滚后或编译参数变更后,make不会对文件再次进行编译;broc除了使用文件的修改时间,还基于文件内容的哈希值以及编译参数作为增量编译的判断标准,增量编译的准确性会更高;
支持protobuf
broc内置对protobuf的支持,将proto文件编译成静态库.a文件一步完成
安装配置
系统要求
操作系统Linux
工具要求
Python
版本 >= 2.6.6, 建议使用2.7版本
git
版本 >= 2.1.2
svn
版本 >= 1.7
gcc/g++
broc使用g++/gcc进行编译,需要事先安装好
protobuf
broc使用了protobuf,自带了protobuf的安装包
安装
下载代码
git clone https://github.com/baidu/broc.git baidu/broc
安装protobuf
进入到tools目录执行sh install protobuf, protobuf被安装在$HOME/protobuf目录下
处理proto文件
进入到tools目录下面执行sh install proto, 生成broc自用的py文件
设置PATH
将broc的client目录设置到PATH中, 例如:export PATH=$HOME/broc/client:$PATH
broc配置
broc安装完后,执行broc命令可以生成broc的配置文件,配置文件位于用户的$HOME目录下:~/.broc.rc配置文件内容:
[repo]
svn_repo_domain = https://github.com
git_repo_domain = https://github.com
svn_postfix_branch = BRANCH
svn_postfix_tag = PD_BL
svn_repo_domain svn仓库域名
git_repo_domain git仓库域名
svn_postfix_branch svn url中branch名后缀
svn_postfix_tag svn url中tag名后缀
参数svn_repo_domain和git_repo_domain分别表示SVN和GIT代码库的域名,配置成自己域名即可。一个依赖库出现不同版本时需要对版本进行对比,确定编译时要使用的依赖模块版本;SVN管理的依赖模块版本的对比是通过模块的svn url来完成的,因此broc要求svn url有统一的命名方法。在SVN URL中进行了详细说明,可以参照此方法根据自己的实际情况对 svn_postfix_branch, svn_postfix_tag进行配置。
使用手册
https://github.com/baidu/broc/wiki/broc-tutorial
构建规范
前两天看到了一篇关于 ROC 的推送文章,突然发现这块上学时的知识已经逐渐开始忘却了,顺便复习一下这部分知识顺手记录下来。 混淆矩阵 ,它是一组具有相同类型的数据的集合。但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为小数,因为数据类型不同,显然不能用一个数组来存放。 在C语言中,可以使用 结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为: struct 结构体名{
2022.9.6投递 9.8面试 (16min) 1、自我介绍 2、本科的一个比赛 3、研究生项目 4、插入排序原理、快排原理? 5、堆和栈的区别 6、内存泄漏 7、野指针 8、职业规划 9、反问 感觉太简单了,面试官着急下班,HR也没来,本来应该是HR和技术官两个人都提问题的 #亿道集团##C/C++##C工程师##面经##C语言#
3.2. 安装C语言工具 Go的工具链采用C语言编写,构建需要安装以下开发工具: GCC, C语言标准库, Bison, make, awk, 和 ed (编辑器). 对于 OS X 系统,以上工具是Xcode的一部分。 对于 Ubuntu/Debian 系统,运行安装命令: sudo apt-get install bison ed gawk gcc libc6-dev make
在欢迎你拥抱OpenFOAM之前,首先欢迎来到C++的世界! 若有程序员说 xxx语言是世界上最好的语言 不严重的情况是整个聊天群下午就会爆掉了,严重的是会引起人身攻击的。虽然PHP直接在官方文档里面说 PHP is the best language for web programming 但C++并没有说C++ is the best language for scientific compu
网易互娱: 三道编程题: Q:1、身份证号前17位分别乘以不同系数的和除以11,余数对应第18位,现输入15-17位可能有1-3个未知数的身份证号,例如”342212198802256*23X“,”*“为未知数,求出未知数有多少解法。 0条回答 Q:2、输入若干数据,第一行代表有多少组数据,一组数据的第一行代表这组数据有多少个任务,一组数据的第二行的第一个数代表这组数据的第一个任务所需完成天数,第
上一个小节 C 语言的简介中我们对 C 语言已经有了一个简单的了解。这一节我们就来看一下 C 语言的程序结构,了解了 C 语言的程序结构之后我们才能正式的开始编写 C 语言程序。下面我们来看一个最简单的 C 语言可执行程序: 1. 示例程序 我们先看一个最简单的可以执行的 C 语言的程序: 案例演示 预览 复制 复制成功! # include <stdio.h> int main() {
C/C++ 语言参考 基本C/C++ 预处理命令 操作符优先级 转义字符 ASCII码表 基本数据类型 关键字 标准 C 库: Standard C I/O Standard C String & Character Standard C Math Standard C Time & Date Standard C Memory Other standard C functions C++ C++
C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。