一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种软件工程构建方法、系统及存储介质与流程

2022-08-17 11:37:17 来源:中国专利 TAG:


1.本发明属于软件工程构建领域,具体涉及一种软件工程构建方法、系统及存储介质。


背景技术:

2.随着互联网公司,尤其是嵌入式产品的互联网公司客户需求不断增长,业务范围扩大,研发的硬件产品越来越多,如何维护多个嵌入式项目,如何提高项目的开发效率成为软件工程构建领域亟待解决的问题。
3.现有技术中,通常是根据配置文件中源码地址下载各个工程对应的目标代码模块,并与获取的对应的待检测代码模块进行对比,在不同的情形下需要先对待检测代码进行编译和检测,再将通过编译和检测的待检测代码模块作为新的目标代码模块,即现有技术编译通常是经过条件触发来进行编译并用来构建软件工程的,由于每一次都需要判断匹配然后触发编译,因此这种方式会降低整个软件工程的效率。


技术实现要素:

4.针对上述现有技术中存在的缺陷,本发明提供一种提高软件工程构建效率的软件工程构建方法、系统及存储介质。
5.本发明提出的技术方案如下:
6.第一方面本发明公开了一种软件工程构建方法,包括以下步骤:
7.构建软件工程项目编译规则;
8.初始化目标项目的默认清单,所述默认清单包含公共代码仓库和历史项目的代码仓库地址及代码本地存储路径,删除历史项目的代码仓库地址及代码本地存储路径并将目标项目的代码仓库地址及代码本地存储路径加入所述默认清单,得到目标项目的更新清单,其中所述目标项目指待加入所述软件工程的新项目;
9.根据所述更新清单从代码仓库获取代码,执行目标项目;
10.新建配置文件,根据所述编译规则进入工作目录,为目标项目定制项目配置;
11.保存所述项目配置,进行项目编译,完成软件工程构建。
12.进一步地,所述编译规则基于buildroot外部目录树机制构建。
13.进一步地,使用repo工具初始化目标项目的默认清单。
14.进一步地,所述执行目标项目还包括:
15.给目标项目中一项工作的不同处理事件分别建立工作分支并加载环境变量。
16.进一步地,所述定制项目配置的配置选项包括:目标属性,构建属性,工具链,系统配置项,内核,目标包,文件系统镜像,引导程序,主机程序,传统配置选项,外部选项。
17.进一步地,所述系统配置项具体包括:
18.选择自定义文件系统目录结构;
19.选择已有的文件系统目录结构;
20.选择编译方式;
21.选择构建后脚本并指定上传参数;
22.选择镜像后脚本并指定上传参数。
23.进一步地,所述工具链通过provides机制指定。
24.进一步地,在所述外部选项中为目标项目配备工具包。
25.第二方面本发明公开了一种软件工程构建系统,包括以下模块:
26.规则构建模块,用于构建软件工程项目编译规则;
27.清单更新模块,用于初始化目标项目的默认清单,所述默认清单包含公共代码仓库和历史项目的代码仓库地址及代码本地存储路径,删除历史项目的代码仓库地址及代码本地存储路径并将目标项目的代码仓库地址及代码本地存储路径加入所述默认清单,得到目标项目的更新清单;
28.项目执行模块,用于根据所述更新清单从代码仓库获取代码,执行目标项目;
29.配置定制模块,用于新建配置文件,根据所述编译规则进入工作目录,为目标项目定制项目配置;
30.项目编译模块,用于保存所述项目配置,进行项目编译,完成软件工程构建。
31.第三方面本发明公开了一种计算机可读存储介质,用于存储计算机执行指令,当所述计算机执行指令被执行时,实现第一方面所述的任一种可能实现的软件工程构建方法。
32.本发明提出的软件工程构建方法、系统及可读存储介质,区别于现有技术,先构建软件工程项目编译规则,通过引入repo根据更新清单快速从代码仓库获取代码,执行目标项目,根据编译规则进入工作目录,为目标项目定制项目配置,最后进行项目编译,完成软件工程构建。本发明通过外部目录树机制建立编译规则,并利用repo快速获取代码仓库存储的代码,根据编译规则进入项目进行工程构建,使得整套软件工程构建方法更加流畅、管理更加方便,同时实现了多项目的标准化构建及软件工程中公共代码的复用,有效提升了软件工程构建的效率。
33.进一步地,给目标项目中一项工作的不同处理事件分别建立工作分支并加载环境变量,通过使用repo预先给所有仓库建立至少一个工作分支,所述工作分支与目标项目的待处理事件对应,在一个完整的处理流程中一个工作分支仅处理一个待处理事件,从而实现多事件项目并行处理,克服了现有技术项目任务串行处理的缺陷。
附图说明
34.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对技术方案描述时所需要使用的附图作简单地介绍,显而易见地,本发明的示意性实施例及其说明仅用于解释本发明,并不构成对本发明的不当限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。在附图中:
35.图1是本发明实施例1方法的步骤示意图;
36.图2是本发明实施例2系统的结构示意图。
具体实施方式
37.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
38.buildroot是linux平台上一个构建嵌入式linux系统的框架。整个buildroot是由makefile(*.mk)脚本和kconfig(config.in)配置文件构成的。基于此,本发明提出利用buildroot的外部目录树机制构建软件工程项目编译规则,执行make menuconfig进行项目配置,编译出可烧写到嵌入式设备运行的linux系统文件(包含bootloader、kernel、rootfs以及rootfs中的各种库和应用程序),同时,使用repo工具动态调取多个git仓库,通过buildroot和repo的结合,实现多项目的标准化构建及软件工程中公共代码的复用。
39.实施例1
40.参照图1,本实施例提供一种软件工程构建方法,该方法包括以下步骤:
41.s1:构建软件工程项目编译规则;
42.具体地,基于buildroot外部目录树机制构建编译规则,构建外部目录树,该外部目录树是基于目录层次的编译规则,执行start.sh加载项目脚本程序时会从外部目录树的目录层次中查找并执行对应动作,指定工作目录,加载目标配置文件。
43.所述外部目录树用于配合repo实现软件工程构建,所述bulidroot外部目录树包括buildroot源码、工程构建所依赖的工具源码下载路径、工作目录(即加载项目配置时所指定的目录)、定制化的外部目录树。
44.所述定制化目录树具体包括有配置文件、外部指定执行模块、包、环境变量设置模块、源码路径配置模块、start.sh加载项目脚本程序等。
45.对于所述配置文件,buildroot通过配置文件扩展外部选项;
46.所述外部指定执行模块,用于指定需要的mk源文件;
47.所述包包括包配置文件、包mk源文件;
48.所述环境变量设置模块用于设置环境变量;所述源码路径配置模块用于配置源码路径。
49.本步骤通过外部目录树机制建立编译规则,为后续进入工作目录定制项目配置做准备。
50.s2:获取目标项目的更新清单;
51.具体地,初始化目标项目的默认清单,所述默认清单包含公共代码仓库和历史项目的代码仓库地址及代码本地存储路径;若历史项目的代码仓库地址及代码本地存储路径不为空,则删除历史项目的代码仓库地址及代码本地存储路径并将目标项目的代码仓库地址及代码本地存储路径加入所述默认清单,否则直接将目标项目的代码仓库地址及代码本地存储路径加入所述默认清单,得到目标项目的更新清单;清单指明一个或者多个git仓库以及应用于项目的路径。
52.本实施例将project的项目作为目标项目加入软件工程中,将更新清单的数据加入到配置文件project_default.xml中,新建一新的配置文件project_defconfig,具体为:
53.《?xml version="1.0"encoding="utf-8"?》
54.《manifest》
55.《project path="buildroot"name="wesa/buildroot"/》,其中,path配置代码存放的本地路径,name远程代码仓库的路径,建立映射,公用buildroot的源代码;
56.《project path="dl"name="wesa/dl"/》,其中,通过buildroot下载的文件,编译的时候会依赖第三方库,均会下载保存至该路径;
57.《project path="platform"name="wesa/platform"/》,即外部目录树,是基于buildroot外部目录树机制构建的编译规则;
58.《project path="platform/source"name="wesa/source"/》,配置程序源代码路径;
59.《project path="platform/board/hisi/project"name="wesa/board/project"/》,配置与硬件相关的板级源码路径;
60.《/manifest》
61.s3:根据所述更新清单从代码仓库获取代码,执行目标项目;
62.引入repo,repo是使用python对git进行封装,简化了对多个git版本库的管理。使用git命令操作,实现repo管理版本库。
63.具体地,本发明引入repo之后,通过配置文件获取project的项目代码,rep o init-u ssh://git@abc.com/pro_a/mani.git-m project_default.xml;
64.进一步地,为了克服现有技术项目任务串行处理的缺陷,本发明引入多事件项目并行处理机制,当目标项目的一项工作存在多个不同的处理事件,在目标项目处理之前,使用repo预先给所有仓库建立至少一个工作分支,所述工作分支与标准项目的待处理事件对应,在一个完整的处理流程中一个工作分支仅处理一个待处理事件。
65.所述工作分支创建完成后加载环境变量。
66.s4:新建配置文件,根据所述编译规则进入工作目录,为目标项目定制项目配置;
67.具体地,为project001定制项目配置具体如下:
68.配置选项包括:
69.target options,即目标属性,该配置选项指定目标属性,根据目标板特性填写。
70.build options,即构建属性,该配置选项指定编译属性:配置保存文件,源码下载地址,包覆盖文件的位置等。
71.toolchain,即工具链,该配置选项通过provides机制指定自定义的工具链。
72.system configuration即系统配置项。
73.kernel,即内核,该配置选项可关闭内核编译,使用自定义编译方式。
74.target packages,即目标包配置,该配置选项可关闭busybox编译,使用自定义编译方式。
75.filesystem images,即文件系统镜像,该配置选项可不选用buildroot提供的镜像方式,便于使用我们自己的镜像方式。
76.此外,配置选项还包括bootloaders引导程序、host utilities主机程序、legacy config options传统配置选项、external options外部选项等。
77.其中,在配置系统配置项时,system configuration系统配置项的工作流程为:
78.a)选择自定义文件系统目录结构;
79.进一步地,如果没有指定的目录结构(如对接项目)则选择默认的方式,buildroot会生成默认的out/target目录;
80.b)指定已有的文件系统目录结构xxx/overlay;
81.c)将init system设为none,用以关闭busybox,指定编译方式;
82.d)指定post-build.sh(构建后脚本),用于构建后镜像前的一些自定义操作;
83.e)指定post-image.sh(镜像后脚本),用于镜像后的一些自定义操作;
84.f)指定传给以上两个脚本的参数。
85.其中,在配置外部选项时,external options(外部选项)为:
86.来自platform/config.in;
87.toolchain:指定toolchain前缀,安装路径和安装目录,默认是"bin",以下配置表示完整安装路径是:/opt/hisi-linux/x86-arm/arm-himix200-linux/bin;
88.linux:指定kernel源码路径,配置方式,配置文件,编译参数;配置方式是copy则需要填写完整的配置文件路径,如果是make则填写文件名即可;
89.busybox:指定busybox的源码路径,配置方式,配置文件,编译参数;配置方式是copy则需要填写完整的配置文件路径,如果是make则填写文件名即可;
90.project prepare tools:project必备工具包,其他项目不需要。
91.s5:保存所述项目配置,进行项目编译,完成软件工程构建;
92.具体地,保存s4的项目配置,配置文件的保存路径为out/defconfig;
93.make savedefconfig
94.编译:
95.make 2》&1|tee build.log
96.完成软件工程构建。
97.本发明提出的软件工程构建方法,区别于现有技术,先构建软件工程项目编译规则,通过引入repo根据更新清单快速从代码仓库获取代码,执行目标项目,根据编译规则进入工作目录,为目标项目定制项目配置,最后进行项目编译,完成软件工程构建。本发明通过外部目录树机制建立编译规则,并利用repo快速获取代码仓库存储的代码,根据编译规则进入项目进行工程构建,使得整套软件工程构建方法更加流畅、管理更加方便,同时实现了多项目的标准化构建及软件工程中公共代码的复用,有效提升了软件工程构建的效率。
98.实施例2
99.本实施例提供一种软件工程构建系统,参照图2,包括以下模块:
100.规则构建模块101,用于构建软件工程项目编译规则;
101.清单更新模块102,用于初始化目标项目的默认清单,删除默认清单中历史项目的代码仓库地址及代码本地存储路径并将目标项目的代码仓库地址及代码本地存储路径加入所述默认清单,得到目标项目的更新清单;
102.项目执行模块103,用于根据所述更新清单从代码仓库获取代码,执行目标项目;
103.配置定制模块104,用于新建配置文件,根据所述编译规则进入工作目录,为目标项目定制项目配置;
104.项目编译模块105,用于保存所述项目配置,进行项目编译,完成软件工程构建。
105.另外,本发明实施例还提供一种计算机可读存储介质,其中,该计算机可读存储介
质可存储有程序,该程序执行时包括上述方法实施例中记载的任何软件工程构建方法的部分或全部步骤。
106.基于现有技术存在复用公共软件代码的瓶颈,本发明提供了一种软件工程构建方法、系统及存储介质,创新地引入repo结合buildroot,使用repo帮助开发者管理多个git仓库并通过buildroot为开发者提供构建标准,只需要通过repo拉取代码仓库代码,便可拉取新项目的项目代码,执行定制项目配置文件,便可加载新项目的配置文件。通过利用buildroot和repo,本发明便完成了多项目的标准化构建规则,并且复用了已有的公共代码,极大提升了开发效率。
107.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
108.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储器包括:u盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random accessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
109.本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器、随机存取器、磁盘或光盘等。
110.以上所述的具体实施方式,对本技术的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本技术的具体实施方式而已,并不用于限定本技术的保护范围,凡在本技术的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本技术的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献