快速编译工程代码的方法技术

技术编号:35860734 阅读:20 留言:0更新日期:2022-12-07 10:50
本发明专利技术涉及快速编译工程代码的方法,提取工程所有Makefile文件,解析出编译目标target和依赖目标,生成target依赖关系文件;依据target依赖关系文件解析和计算出每个target的编译依赖深度;依据计算的target编译依赖深度结果利用多线程并发编译多个target。基于工程Makefile文件解析和运用多线程技术实现工程代码编译时间大幅降低,采用多线程技术充分发挥编译服务器的性能,充分利用CPU资源,并发编译多个target,极大的缩减了编译整个工程代码的时间,高效的完成全工程编译。高效的完成全工程编译。高效的完成全工程编译。

【技术实现步骤摘要】
快速编译工程代码的方法


[0001]本专利技术涉及一种快速编译工程代码的方法。

技术介绍

[0002]目前,嵌入式软件发展迅速,以政企网关设备为例,客户需求越来越多,进而设备所需的功能模块越来越多,导致工程代码日渐庞大,传统的编译方法为直接添加新target,整个工程target按顺序执行,从而编译时间会逐步变长,极大的影响了开发效率;并且当前编译服务器的CPU都是多核的,按传统的编译方法,如果单个target本身无法支持多核同时编译,则编译服务器的资源会极大的浪费,因此充分利用编译服务器性能快速高效的编译工程代码成为一个切实的需求。

技术实现思路

[0003]本专利技术的目的是克服现有技术存在的不足,提供一种快速编译工程代码的方法。
[0004]本专利技术的目的通过以下技术方案来实现:
[0005]快速编译工程代码的方法,特点是:对拥有多target的工程代码的Makefile文件解析提取出target和对应依赖,利用多线程并发编译多个target,包括以下步骤:
[0006]1)提取工程所有Makefile文件,解析出编译目标target和依赖目标,生成target依赖关系文件;
[0007]2)依据target依赖关系文件解析和计算出每个target的编译依赖深度;
[0008]3)依据计算的target编译依赖深度结果利用多线程并发编译多个target。
[0009]进一步地,上述的快速编译工程代码的方法,其中,所述步骤1),target依赖文件格式定义如下:
[0010]targetA=空
[0011]targetB=空
[0012]targetC=targetA,targetB
[0013]targetA、targetB和targetC为工程待编译目标,targetA无依赖,targetB无依赖,targetC依赖targetA和targetB,故targetA和targetB是targetC的依赖,多个依赖以逗号分隔。
[0014]进一步地,上述的快速编译工程代码的方法,其中,所述步骤2),依据target依赖关系文件解析和计算出每个target的编译依赖深度,步骤如下:
[0015]S21)依据target依赖文件解析出所有target进行保存,存储结构为Hash链表;
[0016]S22)依据target依赖文件解析出所有target的依赖进行保存,存储结构为字符串数组;
[0017]S23)target校验,剔除相同的target依赖记录;
[0018]S24)遍历步骤S21)中生成的Hash链表,若target对应的依赖为空,则依赖深度为1,若target有对应依赖,则依赖深度+1,将依赖当作target递归计算,得到最终依赖深度,
相同依赖深度的target存储到同一链表,最终生成多条依赖深度不同的链表。
[0019]进一步地,上述的快速编译工程代码的方法,其中,步骤S21),依据target依赖文件解析出所有target进行保存,存储结构为Hash链表,4个target根据target名称按固定算法计算Hash的key值,targetA key值为0则存入list[0]链表,targetB和targetD key值为3则存入list[3]链表,targetC key值为10,则存入list[10]链表;
[0020]步骤S22),依据target依赖文件解析出所有target的依赖进行保存,存储结构为字符串数组;
[0021]步骤S23),target校验,剔除相同的target依赖记录,即在将target添加到p_key_list中时查找该target是否已存在于p_key_list中,若存在,则忽略;
[0022]步骤S24),遍历步骤S21)中生成的Hash链表,若target对应的依赖为空,则依赖深度为1,若target有对应依赖,则依赖深度+1,将依赖当作target递归计算,得到最终依赖深度,相同依赖深度的target存储到同一链表,最终生成多条依赖深度不同的链表,默认依赖深度为1,遍历p_key_list,计算targetA依赖深度,targetA依赖targetB,则依赖+1,继续查找targetB,targetB无依赖,则targetA的依赖深度为2,存入list[2]dnext链表;计算targetB依赖深度,targetB无依赖,则targetB依赖深度为1,存入list[1]dnext链表;计算targetC依赖深度,targetC无依赖,则targetC依赖深度为1,存入list[1]dnext链表;计算targetD依赖深度,targetD有多个依赖,则遍历所有依赖,首先依赖targetA,则依赖+1,继续查找targetA,targetA依赖targetB,则依赖+1,继续查找targetB,targetB无依赖,则targetD的目前依赖深度为3,然后依赖targetC,targetC无依赖,则targetD的目前依赖深度为2,取两次计算的targetD的依赖最大值,即3,存入list[3]dnext链表。
[0023]进一步地,上述的快速编译工程代码的方法,其中,步骤3),依据计算的target编译依赖深度结果运用多线程技术并发编译多个target,步骤如下:
[0024]S31)遍历步骤S24)中生成的多条依赖深度不同的链表,按照依赖深度从小到大进行遍历,因待编译target在其所有依赖编译完成之后编译,按线程配置个数启动线程,每个线程步骤如下:
[0025]S311)若当前依赖深度链表不为空,则线程取当前未编译的target进行编译,并设置编译标记,编译完成则从当前链表删除target并退出,编译失败,则设置错误标记,通知其他线程退出,所有步骤结束;
[0026]S312)若当前依赖深度链表不为空同时依赖深度链表所有target未全部编译完成,则继续步骤S311);
[0027]S313)若当前依赖深度链表为空同时依赖深度链表所有target未全部编译完成,则线程直接退出;
[0028]S314)若当前依赖深度链表为空同时依赖深度链表所有target全部编译完成,继续步骤S32);
[0029]S32)选取下一条依赖深度的链表,继续步骤S31),若所有依赖深度的链表均编译完成,则编译完成,程序退出。
[0030]本专利技术与现有技术相比具有显著的优点和有益效果,具体体现在以下方面:
[0031]本专利技术基于工程Makefile文件解析和运用多线程技术实现工程代码编译时间大幅降低,采用多线程技术充分发挥编译服务器的性能,充分利用CPU资源,并发编译多个
target,极大的缩减了编译整个工程代码的时间,高效的完成全工程编译,显著提高了开发的效率。
[0032]本专利技术的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.快速编译工程代码的方法,其特征在于:对拥有多target的工程代码的Makefile文件解析提取出target和对应依赖,利用多线程并发编译多个target,包括以下步骤:1)提取工程所有Makefile文件,解析出编译目标target和依赖目标,生成target依赖关系文件;2)依据target依赖关系文件解析和计算出每个target的编译依赖深度;3)依据计算的target编译依赖深度结果利用多线程并发编译多个target。2.根据权利要求1所述的快速编译工程代码的方法,其特征在于:所述步骤1),target依赖文件格式定义如下:targetA=空targetB=空targetC=targetA,targetBtargetA、targetB和targetC为工程待编译目标,targetA无依赖,targetB无依赖,targetC依赖targetA和targetB,故targetA和targetB是targetC的依赖,多个依赖以逗号分隔。3.根据权利要求1所述的快速编译工程代码的方法,其特征在于:所述步骤2),依据target依赖关系文件解析和计算出每个target的编译依赖深度,步骤如下:S21)依据target依赖文件解析出所有target进行保存,存储结构为Hash链表;S22)依据target依赖文件解析出所有target的依赖进行保存,存储结构为字符串数组;S23)target校验,剔除相同的target依赖记录;S24)遍历步骤S21)中生成的Hash链表,若target对应的依赖为空,则依赖深度为1,若target有对应依赖,则依赖深度+1,将依赖当作target递归计算,得到最终依赖深度,相同依赖深度的target存储到同一链表,最终生成多条依赖深度不同的链表。4.根据权利要求1或3所述的快速编译工程代码的方法,其特征在于:步骤S21),依据target依赖文件解析出所有target进行保存,存储结构为Hash链表,4个target根据target名称按固定算法计算Hash的key值,targetA key值为0则存入list[0]链表,targetB和targetD key值为3则存入list[3]链表,targetC key值为10,则存入list[10]链表;步骤S22),依据target依赖文件解析出所有target的依赖进行保存,存储结构为字符串数组;步骤S23),target校验,剔除相同的target依赖记录,即在将target添加到p_key_list中时查找该target是...

【专利技术属性】
技术研发人员:朱进杨凯刘继明金宁刘松
申请(专利权)人:网经科技苏州有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1