CN112835587B - 一种编译集成方法及装置 - Google Patents
一种编译集成方法及装置 Download PDFInfo
- Publication number
- CN112835587B CN112835587B CN202110156878.4A CN202110156878A CN112835587B CN 112835587 B CN112835587 B CN 112835587B CN 202110156878 A CN202110156878 A CN 202110156878A CN 112835587 B CN112835587 B CN 112835587B
- Authority
- CN
- China
- Prior art keywords
- compiling
- systems
- target product
- file
- source code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种编译集成方法及装置,该方法包括:获取目标产品的配置文件,目标产品包括至少两个***,对配置文件进行解析,获取至少两个***中每个***的依赖关系,根据每个***的依赖关系从源代码仓库获取每个***对应的源代码模块,利用与每个***对应的编译工具分别对每个***对应的源代码模块进行编译,生成每个***的编译文件,根据至少两个***中的所有***的编译文件生成目标产品的镜像文件。本申请通过简单的设计子***的依赖关系,实现不同子***的快速编译和构建过程,实现基于不同的平台开发的子***同时编译和集成,提高***的构建效率,简化了融合多个子***的目标***的编译集成过程,避免重复构建工作。
Description
技术领域
本申请涉及软件开发技术领域,特别涉及一种编译集成方法、装置、计算机设备及存储介质。
背景技术
随着自动驾驶/辅助驾驶技术不断变革,车载电子***的智能化和复杂度程度不断增加。为应对不同***日益增加的算力需求和不同产品组合需求,各种以功能划分的组件和***被不断的引入。例如,对于车载信息娱乐***(In-Vehicle Infotainment,IVI)(也可以称为“车机***”),通过集成Linux***到车机***以提高***的启动响应速度,使车机***从开机到达可用状态的时间花费很短,通过集成Android***以丰富车机***的应用生态,使得车机***融合到Android生态环境中,提高车机***的娱乐性和可扩展性。此外,为应对车机***的高度实时环境需求,很多实时操作***(如Free-RTOS等)通常也需要被集成到车机***中,例如音频处理***和网络数据处理***等。甚至,对于物理多核SoC(片上***),不同的物理核心上需要同时运行多种功能***。
然而,随着多个***共存需求被不断提出,集成多种***到车机***的现有方案却存在不少的问题和不便。对于不同的***及***内部应用的开发,编译和打包通常都是分开进行,即采用不同的编译和集成框架分别完成各自组件和***的编译,最后再整合打包,形成完整的***。而对于***内部应用以及***的编译集成过程则是通过直接编写依赖关系文件的形式进行,这样不仅繁琐、易于出错,还不利于扩展新的平台,对产品组合策略也存在极大的限制。
因此,亟需提出一种新的编译集成方案,以解决上述问题。
发明内容
为了解决现有技术的问题,本申请实施例提供了一种编译集成方法、装置、计算机设备以及存储介质,适用的编译语言包括但不限于C语言、C++等,以克服现有技术中存在的融合多个子***的***的编译集成方案过程繁琐、分散、可扩展性差以及模块复用程度低等问题。
为解决上述一个或多个技术问题,本申请采用的技术方案是:
第一方面,提供了一种编译集成方法,应用于编译集成框架,该编译集成框架支持一个产品的不同***的同步编译或者至少两个产品的同步编译,其中,所述一个产品为目标产品或所述至少两个产品包括目标产品,该方法包括如下步骤:
获取所述目标产品的配置文件,所述目标产品包括至少两个***;
对所述配置文件进行解析,获取所述至少两个***中每个***的依赖关系;
根据所述每个***的依赖关系从源代码仓库获取所述每个***对应的源代码模块;
利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件;
根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件。
进一步的,所述获取所述目标产品的配置文件,可以包括:
确定所述目标产品包含的所有***、以及所述所有***中的每个***包含的一个或多个应用;
采用预设的语言定义所述所有***中的每个***的所述一个或多个应用的功能描述和依赖关系,生成所述目标产品的配置文件。
进一步的,所述根据所述每个***的依赖关系从源代码仓库获取所述每个***对应的源代码模块,可以包括:
根据所述每个***的依赖关系确定所述每个***所包含的一个或多个应用,以及所述一个或多个应用所包含的一个或多个组件;
从所述源代码仓库获取所述每个***所包含的所述一个或多个组件对应的源代码模块。
进一步的,在利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译前,所述方法还可以包括:
获取所述每个***的***类型,根据所述***类型查询是否存在所述每个***对应的编译工具,若不存在,则根据所述***类型配置所述每个***对应的编译工具。
进一步的,在利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译前,所述方法还可以包括:
查询本地或远端服务器是否存在所述每个***的编译文件,若存在,则获取所述每个***的编译文件,否则,利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件。
进一步的,所述根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件可以包括:
对所述至少两个***中的所有***的编译文件进行去重处理,将去重后的所述至少两个***中的所有***的编译文件打包生成所述目标产品的镜像文件。
进一步的,在根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件后,所述方法还可以包括:
获取并解析所述镜像文件的测试文件,根据解析结果从所述源代码仓库获取对应的测试代码;
在预设的测试环境中编译并执行所述测试代码生成测试结果;
根据所述测试结果生成测试报告。
进一步的,所述目标产品可以包括以下各项中的至少一项:车载信息娱乐***、用于车辆通讯功能的智能网联***(SmartBox***)、电池管理***(Battery ManagementSystem,BMS)以及物理多核片上***(System-on-a-Chip,SOC)的不同物理核心上需要同时运行多种功能的***。
进一步的,所述配置文件可以包括YAML格式的配置文件。
第二方面,提供了一种编译集成装置,所述编译集成装置支持一个产品的不同***的同步编译或者至少两个产品的同步编译,其中,所述一个产品为目标产品或所述至少两个产品包括目标产品,所述装置包括:
文件获取模块,用于获取所述目标产品的配置文件,所述目标产品包括至少两个***;
文件解析模块,用于对所述配置文件进行解析,获取所述至少两个***中每个***的依赖关系;
代码获取模块,用于根据所述每个***的依赖关系从源代码仓库获取所述每个***对应的源代码模块;
代码编译模块,用于利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件;
***生成模块,用于根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件。
第三方面,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如下步骤:
获取所述目标产品的配置文件,所述目标产品包括至少两个***;
对所述配置文件进行解析,获取所述至少两个***中每个***的依赖关系;
根据所述每个***的依赖关系从源代码仓库获取所述每个***对应的源代码模块;
利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件;
根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件。
第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如下步骤:
获取所述目标产品的配置文件,所述目标产品包括至少两个***;
对所述配置文件进行解析,获取所述至少两个***中每个***的依赖关系;
根据所述每个***的依赖关系从源代码仓库获取所述每个***对应的源代码模块;
利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件;
根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件。
本申请实施例提供的技术方案带来的有益效果是:
本申请实施例提供的***的编译集成方法、装置、计算机设备及存储介质,应用于编译集成框架,所述编译集成框架支持一个产品的不同***的同步编译或者至少两个产品的同步编译,其中,所述一个产品为目标产品或所述至少两个产品包括目标产品,所述方法通过获取所述目标产品的配置文件,所述目标产品包括至少两个***,对所述配置文件进行解析,获取所述至少两个***中每个***的依赖关系,根据所述每个***的依赖关系从源代码仓库获取所述每个***对应的源代码模块,利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件,根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件,通过简单的设计不同子***的依赖关系,实现不同子***的快速编译和构建过程,并实现了基于不同的平台开发的子***同时编译和集成,提高***的构建效率,简化了融合多个子***的目标***的编译集成过程,避免重复构建工作。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的编译集成框架的架构图;
图2是本申请实施例提供的通过编译集成框架实现对目标产品进行编译集成的流程图;
图3是本申请实施例提供的YAML格式的配置文件的示意图;
图4是本申请实施例提供的描述依赖关系的YAML语法表达方式的示意图;
图5是本申请实施例提供的将YAML格式的配置文件解析为依赖关系的示意图;
图6是本申请实施例提供的根据依赖关系编译生成编译文件的示意图;
图7是本申请实施例提供的通过编译集成框架实现对目标产品进行测试的流程图;
图8是本申请实施例提供的YAML格式的测试文件的示意图;
图9是本申请实施例提供的编译集成方法的流程图;
图10是本申请实施例提供的编译集成装置的结构示意图;
图11是本申请实施例提供的计算机设备的内部结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
如背景技术所述,对于多个子***共存的***,例如,同时支持Android和Linux两个操作***的车载娱乐***(下称多***车机),需要先分别构建不同子***的编译产物,然后再打包集成到一起。一方面,在当前多个操作***共存的车机***构建需求下,传统的逐个编译构建再集成打包的方式愈加难以满足软件快速开发集成的要求。另一方面,对于面向不同市场需求而制定的多种产品策略的产品编译集成需求,现有技术中的集成方法存在难以灵活组合产品组件的弊端。考虑到多个项目同时推进开发的场景,且多个平台存在灵活组合搭配的需求的情况,采用现有的编译构建工具实难满足要求。
为解决上述问题,本申请实施例中创造性的提出了一种编译集成方法,应用于编译集成框架,可以适用于C语言、C++或其他编译语言,通过简单的设计不同***的依赖关系,实现不同***的快速编译和构建过程,并实现了基于不同的平台开发的***同时编译和集成,提高***的构建效率,简化了融合多个***的目标产品的编译集成过程,避免重复构建工作。
下面将结合附图和各个实施例,对本申请的方案进行详细介绍。
实施例一
为实现上述方法,本申请实施例中提供了一种编译集成框架,该编译集成框架支持一个产品的不同***的同步编译或者至少两个产品的同步编译,参照图1所示,该平台作如下部署:
菜单配置模块,用于组合定制不同***产品或者定制包含不同组件的***产品,通过建立不同菜单配置文件的方式,实现框架内多个项目或多个产品的并行开发、编译和集成,这里需要说明的是,本申请实施例中,菜单配置模块不仅可以用于定义产品的依赖关系,还可以用于定义产品测试时的依赖关系;
编译集成环境支持模块,本申请实施例中的编译集成环境支持模块基于BobBuild Tool编译集成框架和Build Env编译环境配置模块来实现。具体实施时,可以使用Python和YAML语言编写,为框架***YAML菜单配置文件解析转换工具,为组件或者***编译构建提供基础平台,提供安全的沙箱模式实现多种编译环境配置和同存;
代码同步模块,用于实现远端代码仓库服务器和本地代码同步,可以支持多人同时开发,其中同步方式包括但不限于Git、SVN等方式。代码同步模块还用于对菜单配置模块生成的文件进行版本管理,简单通过分支策略实现产品组合设计;
源代码模块,用于管理菜单配置模块配置的产品或者组件的源代码仓库;
编译链工具模块,用于管理针对不同产品硬件平台定制的编译工具链(也称编译工具)。由Bob Build Tool模块和Build Env模块配置编译沙箱环境,源代码在编译工具链的作用下,生成正对特定***平台的编译过程产物(即编译文件),包括但不限于头文件、动态链接或者静态链接的库文件、可执行的程序文件以及配置文件等;
测试配置模块,用于基于菜单配置模块定义的不同测试范畴和方法执行不同测试动作,支持多种的测试手段,可以保证持续构建的质量和产品持续交互能力。例如,当需要针对源代码函数进行单元测试时,则通过菜单配置模块配置单元测试菜单配置文件,所述单元测试菜单配置文件定义了依赖的测试框架(如cppunit或者gtest&gmock等),通过BobBuild Tool模块和Build Env模块配置测试沙箱环境,测试配置模块会在该沙箱环境中对执行代码单元的测试用例,生成特定的测试报告;
编译产物同步模块,用于查询远端CI/CD集成服务器是否存在相同构建产物以及上传本地已构建的而远端CI/CD集成服务器没有完成构建的目标产物。
具体的,如图2所示,通过上述编译集成框架实现对目标产品进行编译集成的过程包括如下步骤:
S110:根据用户需求按照预设格式生成目标产品的配置文件;
具体的,这里的配置文件主要用于定义待生成的目标产品的功能描述和依赖关系。具体实施时,首先获取用户需求,在用户的需求基础上,设计用户的产品方案,包括但不限于按照要求设计产品基于的***平台、产品的功能模块以及产品的版本划分等等,这里的产品指待生成的目标产品。然后按照已经设计好的产品方案,对产品按照功能模块进行划分,以预设格式的配置文件定义出每个功能模块的描述和依赖关系,按照每个产品版本的功能明细,以预设格式的配置文件定义出每个版本产品的描述和依赖关系等。
具体的,作为一种较优的示例,本申请实施例中的预设格式包括但不限于YAML格式。在以YAML格式生成目标产品的配置文件时,利用YAML文件依赖关系树构成一个完整产品(即目标产品)包含的YAML列表及相互关系描述。假设某目标产品至少包括2个不同的***,每个***又包括两个不同的应用,每个应用又由若干个组件搭建而成,其相互间的依赖关系可由如图3所示的YAML文件依赖关系树描述出来。建立以YAML文件编译的菜单目录管理***内部或者***间的依赖关系,以及建立以目标产物目录和中间产物目录不同文件夹,隔离中间产物,可以使目标构建产物清晰明了。并且以YAML文件定义***组件和依赖关系,依赖关系简单,通过自定义模块的YAML文件,实现自定义编译模块范围,通过自定义不同***的YAML文件,即可实现不同产品分支构建,适应于面向多客户和多市场的个性化产品配置需求。
YAML文件格式是一种便于读写的跨浏览器的语言格式,广泛应用于网络应用编程中,类似于JSON,也被广泛用做配置文件等。由于该语言格式应用广泛,支持该语言格式的编辑器和解析工具也十分丰富。本申请实施例提供的菜单配置模块生成的配置文件就是基于YAML文件格式的,通过在YAML文件中定义不同***或者***组件间的依赖关系,实现不同***及内部组件的组合定义,从而实现不同产品组合。图4为通常描述依赖关系的YAML语法表达方式的示意图,图4中描述了产品A的部分依赖关系,图4示出部分表示产品A包括***A和***B,而***A又包括功能模块A、B和C,***B又包括功能模块A、C和E。
进一步参照图3所示,不同***下的组件可能是相同的,例如***1的应用1依赖的组件1、组件2和***1的应用2依赖的组件1、组件2是相同的模块。本申请实施例中,同一***下共享的组件,可以只编译一次就可以被不同的应用多次共享,从而提高编译的效率以及代码的复用率。也就是说,***1下共享的组件1和组件2,可以只编译一次就可以被应用1和应用2多次共享。而不同***之间的组件编译,由于不同***依赖的编译工具链不同,因而无法实现一次编译,多个***间共享。
S120:对所述配置文件进行解析,获取目标产品的依赖关系。
具体的,完成了目标产品的依赖关系描述定义之后,通过编译集成框架的YAML解析模块,将不同产品的YAML依赖关系树解析成不同***、应用和组件的CMakeList/Makefile/mk/bp等文件依赖关系树,该CMakeList/Makefile/mk/bp等文件依赖关系树为可以指导编译的文件,如图5所示。
S130:根据目标产品的依赖关系获取对应的源代码模块,采用对应的编译工具进行编译打包,生成目标产品的镜像文件。
具体的,不同类型的***需要使用不同的编译工具进行编译,本申请中可以预先在编译链配置模块配置定义针对各个类型***使用的编译工具。具体进行编译时,首先根据依赖关系通过代码同步模块从代码仓库获取对应的源代码模块,然后调用各个***对应的编译工具分别进行编译,将生成的编译文件打包,最终生成目标产品的镜像文件,如图6所示。除此之外,本申请实施例中的编译工具还支持实时配置,当某个需要编译的***查询不到对应的预设编译工具时,可以实时为该***配置对应的编译工具。
镜像文件是指将特定的一系列文件按照一定的格式制作成单一的文件,以方便用户下载和使用,例如一个操作***、游戏等。它最重要的特点是可以被特定的软件识别并可直接刻录到光盘上。其实通常意义上的镜像文件可以再扩展一下,在镜像文件中可以包含更多的信息。比如说***文件、引导文件、分区表信息等,这样镜像文件就可以包含一个分区甚至是一块硬盘的所有信息。而通常意义上的刻录软件都可以直接将支持的镜像文件所包含的内容刻录到光盘上。
为了便于理解本申请上述实施例的方案,以下举例说明本申请的编译集成过程:
假设需要开发的目标产品为一款同时集成Android和Linux***的车机***,采用Hypervisor技术实现主机虚拟化,同时运行两个操作***。采用本申请实施例提供的方案,只需要分别定义一个根菜单配置文件,在依赖项中,同时加入Android***和Linux***的菜单配置,此外,还可以在Android***和Linux***的根菜单配置文件中分别加入不同的***组件或应用依赖,从而分别构建成两个完整的Android***和Linux***。也就是说,本申请通过YAML格式的菜单文件构建依赖关系树,然后通过解析关系依赖树,在Bob BuildTool和Build Env构建的YAML解析模块翻译CMakeList.txt/Makefle/mk/bp文件依赖关系,其中Android***采用mk/bp配置文件方式进行编译,再通过不同***配置菜单文件中依赖的不同的编译工具链的配置,在不同的编译工具链下生成不同平台的目标产物,最后完成产物打包过程形成一个完整的***镜像文件。
在完成上述编译集成过程之后,本申请还可以通过上述编译集成框架对目标产品进行测试。具体的,如图7所示,通过上述编译集成框架实现对目标产品进行测试的过程包括如下步骤:
S210:根据测试需求按照预设格式生成目标产品的测试文件;
具体的,本申请提供的***编译集成框架还可以实现对构建的目标产品进行不同维度的测试。用户可以通过菜单配置模块编写不同的测试方案的测试文件实现多种维度测试。以YAML依赖关系树构建的配置文件为例,具体实施时,首先获取用户测试需求,根据用户的测试需求制定对应的测试方案,然后按照已经设计好的测试方案,生成对应的YAML文件。
S220:通过测试配置模块根据测试文件调用相应的测试代码,在预设测试环境中编译并执行所述测试代码生成测试结果。
具体的,以单元测试方案为例,首先根据测试需求以及待测试***中涉及的功能模块制定测试方案(YAML文件),如图8所示,待测试产品为***A,其包括功能模块A、B和C。在测试配置模块内解析以上测试方案,代码同步模块根据解析结果从代码仓库中获取不同功能模块对应的单元测试代码到本测试配置模块中,在编译环境配置模块预先构建的沙箱环境中编译单元测试代码并执行生成的测试代码用例产物,汇总不同测试用例的结果,最终生成单元测试报告。
实施例二
对应于上述实施例一,如图9所示,本申请提供了一种编译集成方法,应用于上述编译集成框架,该方法包括如下步骤:
S310:获取所述目标产品的配置文件,所述目标产品包括至少两个***;
S320:对所述配置文件进行解析,获取所述至少两个***中每个***的依赖关系;
S330:根据所述每个***的依赖关系从源代码仓库获取所述每个***对应的源代码模块;
S340:利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件;
S350:根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件。
作为一种较优的实施方式,本申请实施例中,所述获取所述目标产品的配置文件,可以包括:确定所述目标产品包含的所有***、以及所述所有***中的每个***包含的一个或多个应用;采用预设的语言定义所述所有***中的每个***的所述一个或多个应用的功能描述和依赖关系,生成所述目标产品的配置文件。
具体的,目标产品可能包括多个***,每个***可能包括一个或多个应用,每个应用可能由一个或多个组件搭建而成,本申请中的依赖关系用于描述***、应用以及组件之间的依赖关系,使目标***的结构清晰明了。
作为一种较优的实施方式,本申请实施例中,所述根据所述每个***的依赖关系从源代码仓库获取所述每个***对应的源代码模块,可以包括:根据所述每个***的依赖关系确定所述每个***所包含的一个或多个应用,以及所述一个或多个应用所包含的一个或多个组件;从所述源代码仓库获取所述每个***所包含的所述一个或多个组件对应的源代码模块。
具体的,本申请实施例中,可以针对每个组件预先编写对应的源代码模块,将其存储至源代码仓库中统一管理,使用时可以直接从源代码仓库调用。其中,源代码仓库可以部署在本地,也可以部署在远端服务器,还可以同时在本地和远端服务器均做部署。
作为一种较优的实施方式,本申请实施例中,在利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译前,所述方法还可以包括:获取所述每个***的***类型,根据所述***类型查询是否存在所述每个***对应的编译工具,若不存在,则根据所述***类型配置所述每个***对应的编译工具。
具体的,不同类型的***所需要采用的编译工具也不同,本申请实施例中,支持多个编译平台可以共存。具体实施时,一方面可以预先针对各种类型的***预配置相应的编译工具(也称编译环境),包括但不限于配置交叉编译工具链和设置环境变量等。利用预设的编译工具可以实现不同***的编译,实现多个编译工具共存,从而不需要在同一目标产品中集成多个***时对***分别进行编译、打包。另一方面,本申请实施例中,还支持实时配置编译各种类型的***所需要的编译工具,在编译前,先根据***类型查询是否存在对应的编译工具,若是不存在,则实时配置该***类型所需要的编译工具。支持实时配置编译各种类型的***所需要的编译工具,可以实现快速的引入新的***对应的编译工具链,从而实现新***平台编译打包,提高编译集成框架的扩展性。
作为一种较优的实施方式,本申请实施例中,在利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译前,所述方法还可以包括:查询本地或远端服务器是否存在所述每个***的编译文件,若存在,则获取所述每个***的编译文件,否则,利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件。
具体的,本申请实施例中,采用增量式编译方式,提高***构建效率。具体实施时,设置在本地和CI/CD服务器同步已构建的相同产物(即编译文件),在编译过程中,通过生成编译文件的代码版本快照信息产物的Hash值,为编译文件生成唯一标识,在编译前,通过该标识查询是否存在相同的已构建成功的编译文件,以减少重复编译工作,加快产品的编译构建进程,实现产品的快速迭代。
作为一种较优的实施方式,本申请实施例中,所述根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件,可以包括:对所述至少两个***中的所有***的编译文件进行去重处理,将去重后的所述至少两个***中的所有***的编译文件打包生成所述目标产品的镜像文件。
具体的,在每个子***的编译文件生成后,可以进一步对编译文件进行优化处理,包括但不限于去重处理等。这里的去重主要指将每个子***的编译文件中重复的代码去除,以减少文件大小,减轻存储压力。
作为一种较优的实施方式,本申请实施例中,在根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件后,所述方法还可以包括:获取并解析所述镜像文件的测试文件,根据解析结果从所述源代码仓库获取对应的测试代码;在预设的测试环境中编译并执行所述测试代码生成测试结果;根据所述测试结果生成测试报告。
具体的,本申请实施例可以满足不同的测试需求。对于开发人员,在完成功能或者模块开发任务后,编写单元测试用例,配置YAML依赖关系,即可完成功能或者模块的单元测试验证。对于***性能测试和应用接口测试人员,配置接口测试的YAML文件,即可实现对应用的接口测试。
作为一种较优的实施方式,本申请实施例中,所述目标产品包括以下各项中的至少一项:车载信息娱乐***、用于车辆通讯功能的智能网联***、电池管理***以及物理多核片上***SOC的不同物理核心上需要同时运行多种功能的***。
具体的,本申请实施例中,目标产品包括但不限于集成多个***的产品,如车载信息娱乐***(In-Vehicle Infotainment,IVI)、用于车辆通讯功能的智能网联***(如Smart Box***)、电池管理***(Battery Management System,BMS)以及物理多核片上***(System-on-a-Chip,SOC)的不同物理核心上需要同时运行多种功能的***等。
作为一种较优的实施方式,本申请实施例中,所述配置文件包括YAML格式的配置文件。
实施例三
对应于上述实施例一和二,本申请还提供了一种编译集成装置。图10是根据一示例性实施例示出的编译集成装置的结构示意图,参照图10所示,该装置支持一个产品的不同***的同步编译或者至少两个产品的同步编译,其中,所述一个产品为目标产品或所述至少两个产品包括目标产品,该装置包括:
文件获取模块,用于获取所述目标产品的配置文件,所述目标产品包括至少两个***;
文件解析模块,用于对所述配置文件进行解析,获取所述至少两个***中每个***的依赖关系;
代码获取模块,用于根据所述每个***的依赖关系从源代码仓库获取所述每个***对应的源代码模块;
代码编译模块,用于利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件;
***生成模块,用于根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件。
作为一种较优的实施方式,本申请实施例中,所述文件获取模块具体用于:确定所述目标产品包含的所有***、以及所述所有***中的每个***包含的一个或多个应用;采用预设的语言定义所述所有***中的每个***的所述一个或多个应用的功能描述和依赖关系,生成所述目标产品的配置文件。
作为一种较优的实施方式,本申请实施例中,所述代码获取模块包括:组件确定单元,用于根据所述每个***的依赖关系确定所述每个***所包含的一个或多个应用,以及所述一个或多个应用所包含的一个或多个组件;代码获取单元,用于从所述源代码仓库获取所述每个***所包含的所述一个或多个组件对应的源代码模块。
作为一种较优的实施方式,本申请实施例中,所述装置还包括:工具确定模块,用于获取所述每个***的***类型,根据所述***类型查询是否存在所述每个***对应的编译工具,若不存在,则根据所述***类型配置所述每个***对应的编译工具。
作为一种较优的实施方式,本申请实施例中,所述装置还包括:文件查询模块,用于查询本地或远端服务器是否存在所述每个***的编译文件,若存在,则获取所述每个***的编译文件。
作为一种较优的实施方式,本申请实施例中,所述***生成模块具体用于:对所述至少两个***中的所有***的编译文件进行去重处理,将去重后的所述至少两个***中的所有***的编译文件打包生成所述目标产品的镜像文件。
作为一种较优的实施方式,本申请实施例中,所述装置还包括:***测试模块,用于获取并解析所述镜像文件的测试文件,根据解析结果从所述源代码仓库获取对应的测试代码;在预设的测试环境中编译并执行所述测试代码生成测试结果;根据所述测试结果生成测试报告。
作为一种较优的实施方式,本申请实施例中,所述目标产品包括以下各项中的至少一项:车载信息娱乐***、用于车辆通讯功能的智能网联***、电池管理***以及物理多核片上***SOC的不同物理核心上需要同时运行多种功能的***。
作为一种较优的实施方式,本申请实施例中,所述配置文件包括YAML格式的配置文件。
实施例四
对应于上述实施例一至三,本申请还提供了一种计算机设备。图11是根据一示例性实施例示出的计算机设备的内部结构示意图,参照图11所示,该计算机设备包括通过***总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***、计算机程序和数据库。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种执行计划的优化方法。
本领域技术人员可以理解,图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
作为一种较优的实施方式,本申请实施例中,计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:获取所述目标产品的配置文件,所述目标产品包括至少两个***;对所述配置文件进行解析,获取所述至少两个***中每个***的依赖关系;根据所述每个***的依赖关系从源代码仓库获取所述每个***对应的源代码模块;利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件;根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件。
作为一种较优的实施方式,本申请实施例中,处理器执行计算机程序时还实现以下步骤:确定所述目标产品包含的所有***、以及所述所有***中的每个***包含的一个或多个应用;采用预设的语言定义所述所有***中的每个***的所述一个或多个应用的功能描述和依赖关系,生成所述目标产品的配置文件。
作为一种较优的实施方式,本申请实施例中,处理器执行计算机程序时还实现以下步骤:根据所述每个***的依赖关系确定所述每个***所包含的一个或多个应用,以及所述一个或多个应用所包含的一个或多个组件;从所述源代码仓库获取所述每个***所包含的所述一个或多个组件对应的源代码模块。
作为一种较优的实施方式,本申请实施例中,处理器执行计算机程序时还实现以下步骤:获取所述每个***的***类型,根据所述***类型查询是否存在所述每个***对应的编译工具,若不存在,则根据所述***类型配置所述每个***对应的编译工具。
作为一种较优的实施方式,本申请实施例中,处理器执行计算机程序时还实现以下步骤:查询本地或远端服务器是否存在所述每个***的编译文件,若存在,则获取所述每个***的编译文件,否则,利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件。
作为一种较优的实施方式,本申请实施例中,处理器执行计算机程序时还实现以下步骤:对所述至少两个***中的所有***的编译文件进行去重处理,将去重后的所述至少两个***中的所有***的编译文件打包生成所述目标产品的镜像文件。
作为一种较优的实施方式,本申请实施例中,处理器执行计算机程序时还实现以下步骤:获取并解析所述镜像文件的测试文件,根据解析结果从所述源代码仓库获取对应的测试代码;在预设的测试环境中编译并执行所述测试代码生成测试结果;根据所述测试结果生成测试报告。
作为一种较优的实施方式,本申请实施例中,所述目标产品包括以下各项中的至少一项:车载信息娱乐***、用于车辆通讯功能的智能网联***、电池管理***以及物理多核片上***SOC的不同物理核心上需要同时运行多种功能的***。
作为一种较优的实施方式,本申请实施例中,所述配置文件包括YAML格式的配置文件。
实施例五
对应于上述实施例一至四,本申请实施例中,还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如下步骤:获取所述目标产品的配置文件,所述目标产品包括至少两个***;对所述配置文件进行解析,获取所述至少两个***中每个***的依赖关系;根据所述每个***的依赖关系从源代码仓库获取所述每个***对应的源代码模块;利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件;根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件。
作为一种较优的实施方式,本申请实施例中,所述计算机程序被处理器执行时,还实现如下步骤:确定所述目标产品包含的所有***、以及所述所有***中的每个***包含的一个或多个应用;采用预设的语言定义所述所有***中的每个***的所述一个或多个应用的功能描述和依赖关系,生成所述目标产品的配置文件。
作为一种较优的实施方式,本申请实施例中,所述计算机程序被处理器执行时,还实现如下步骤:根据所述每个***的依赖关系确定所述每个***所包含的一个或多个应用,以及所述一个或多个应用所包含的一个或多个组件;从所述源代码仓库获取所述每个***所包含的所述一个或多个组件对应的源代码模块。
作为一种较优的实施方式,本申请实施例中,所述计算机程序被处理器执行时,还实现如下步骤:获取所述每个***的***类型,根据所述***类型查询是否存在所述每个***对应的编译工具,若不存在,则根据所述***类型配置所述每个***对应的编译工具。
作为一种较优的实施方式,本申请实施例中,所述计算机程序被处理器执行时,还实现如下步骤:查询本地或远端服务器是否存在所述每个***的编译文件,若存在,则获取所述每个***的编译文件,否则,利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件。
作为一种较优的实施方式,本申请实施例中,所述计算机程序被处理器执行时,还实现如下步骤:对所述至少两个***中的所有***的编译文件进行去重处理,将去重后的所述至少两个***中的所有***的编译文件打包生成所述目标产品的镜像文件。
作为一种较优的实施方式,本申请实施例中,所述计算机程序被处理器执行时,还实现如下步骤:获取并解析所述镜像文件的测试文件,根据解析结果从所述源代码仓库获取对应的测试代码;在预设的测试环境中编译并执行所述测试代码生成测试结果;根据所述测试结果生成测试报告。
作为一种较优的实施方式,本申请实施例中,所述目标产品包括以下各项中的至少一项:车载信息娱乐***、用于车辆通讯功能的智能网联***、电池管理***以及物理多核片上***SOC的不同物理核心上需要同时运行多种功能的***。
作为一种较优的实施方式,本申请实施例中,所述配置文件包括YAML格式的配置文件。
综上所述,本申请实施例提供的技术方案带来的有益效果是:
本申请实施例提供的***的编译集成方法、装置、计算机设备及存储介质,应用于编译集成框架,所述编译集成框架支持一个产品的不同***的同步编译或者至少两个产品的同步编译,其中,所述一个产品为目标产品,所述至少两个产品包括目标产品,所述方法通过获取所述目标产品的配置文件,所述目标产品包括至少两个***,对所述配置文件进行解析,获取所述至少两个***中每个***的依赖关系,根据所述每个***的依赖关系从源代码仓库获取所述每个***对应的源代码模块,利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件,根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件,通过简单的设计不同子***的依赖关系,实现不同子***的快速编译和构建过程,并实现了基于不同的平台开发的子***同时编译和集成,提高***的构建效率,简化了融合多个子***的目标***的编译集成过程,避免重复构建工作。
需要说明的是:上述实施例提供的编译集成装置在触发编译集成业务时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的编译集成装置与编译集成方法实施例属于同一构思,即该装置是基于该编译集成方法的,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (9)
1.一种编译集成方法,其特征在于,应用于编译集成框架,所述编译集成框架支持一个产品的不同***的同步编译或者至少两个产品的同步编译,其中,所述一个产品为目标产品或所述至少两个产品包括目标产品,所述目标产品包括至少两个***,所述目标产品为车载信息娱乐***,所述至少两个***包括第一操作***和第二操作***,所述车载信息娱乐***基于Hypervisor实现主机虚拟化以同时运行所述第一操作***和所述第二操作***,所述方法包括:
获取所述目标产品的配置文件;
对所述配置文件进行解析,获取所述至少两个***中每个***的依赖关系;
根据所述每个***的依赖关系从源代码仓库获取所述每个***对应的源代码模块;
利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件;
根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件。
2.根据权利要求1所述的编译集成方法,其特征在于,所述获取所述目标产品的配置文件,包括:
确定所述目标产品包含的所有***、以及所述所有***中的每个***包含的一个或多个应用;
采用预设的语言定义所述所有***中的每个***的所述一个或多个应用的功能描述和依赖关系,生成所述目标产品的配置文件。
3.根据权利要求1或2所述的编译集成方法,其特征在于,所述根据所述每个***的依赖关系从源代码仓库获取所述每个***对应的源代码模块,包括:
根据所述每个***的依赖关系确定所述每个***所包含的一个或多个应用,以及所述一个或多个应用所包含的一个或多个组件;
从所述源代码仓库获取所述每个***所包含的所述一个或多个组件对应的源代码模块。
4.根据权利要求1所述的编译集成方法,其特征在于,在利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译前,所述方法还包括:
获取所述每个***的***类型,根据所述***类型查询是否存在所述每个***对应的编译工具,若不存在,则根据所述***类型配置所述每个***对应的编译工具。
5.根据权利要求1所述的编译集成方法,其特征在于,在利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译前,所述方法还包括:
查询本地或远端服务器是否存在所述每个***的编译文件,若存在,则获取所述每个***的编译文件,否则,利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件。
6.根据权利要求1所述的编译集成方法,其特征在于,所述根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件包括:
对所述至少两个***中的所有***的编译文件进行去重处理,将去重后的所述至少两个***中的所有***的编译文件打包生成所述目标产品的镜像文件。
7.根据权利要求1所述的编译集成方法,其特征在于,在根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件后,所述方法还包括:
获取并解析所述镜像文件的测试文件,根据解析结果从所述源代码仓库获取对应的测试代码;
在预设的测试环境中编译并执行所述测试代码生成测试结果;
根据所述测试结果生成测试报告。
8.根据权利要求1所述的编译集成方法,其特征在于,所述配置文件包括YAML格式的配置文件。
9.一种编译集成装置,其特征在于,所述编译集成装置支持一个产品的不同***的同步编译或者至少两个产品的同步编译,其中,所述一个产品为目标产品或所述至少两个产品包括目标产品,所述目标产品包括至少两个***,所述目标产品为车载信息娱乐***,所述至少两个***包括第一操作***和第二操作***,所述车载信息娱乐***基于Hypervisor实现主机虚拟化以同时运行所述第一操作***和所述第二操作***,所述装置包括:
文件获取模块,用于获取所述目标产品的配置文件;
文件解析模块,用于对所述配置文件进行解析,获取所述至少两个***中每个***的依赖关系;
代码获取模块,用于根据所述每个***的依赖关系从源代码仓库获取所述每个***对应的源代码模块;
代码编译模块,用于利用与所述每个***对应的编译工具分别对所述每个***对应的源代码模块进行编译,生成所述每个***的编译文件;
***生成模块,用于根据所述至少两个***中的所有***的编译文件生成所述目标产品的镜像文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110156878.4A CN112835587B (zh) | 2021-02-03 | 2021-02-03 | 一种编译集成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110156878.4A CN112835587B (zh) | 2021-02-03 | 2021-02-03 | 一种编译集成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112835587A CN112835587A (zh) | 2021-05-25 |
CN112835587B true CN112835587B (zh) | 2022-08-09 |
Family
ID=75932090
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110156878.4A Active CN112835587B (zh) | 2021-02-03 | 2021-02-03 | 一种编译集成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112835587B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113420097B (zh) * | 2021-06-23 | 2023-05-30 | 网易(杭州)网络有限公司 | 一种数据分析方法、装置、存储介质及服务器 |
CN113342355B (zh) * | 2021-08-06 | 2021-12-07 | 北京达佳互联信息技术有限公司 | 一种代码编译方法、装置、电子设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8042098B2 (en) * | 2000-12-06 | 2011-10-18 | Axiomatic Design Software, Inc. | Method and apparatus for producing software |
CN101710279B (zh) * | 2009-12-01 | 2013-07-31 | 中国建设银行股份有限公司 | 一种it***中管理软件模块的方法和装置 |
CN110781086B (zh) * | 2019-10-23 | 2022-02-08 | 南京大学 | 一种跨项目缺陷影响分析方法 |
-
2021
- 2021-02-03 CN CN202110156878.4A patent/CN112835587B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112835587A (zh) | 2021-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11481200B1 (en) | Checking source code validity at time of code update | |
CN112764753B (zh) | 一种项目的部署方法、装置、电子设备及存储介质 | |
CN112835587B (zh) | 一种编译集成方法及装置 | |
CN107766130B (zh) | 虚拟机向容器迁移的方法和装置 | |
CN110059456B (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
CN112882718B (zh) | 编译处理方法、装置、设备及存储介质 | |
CN115629971A (zh) | 一种应用的开发***和开发方法 | |
CN111309335A (zh) | 插件应用的编译方法、装置及计算机可读存储介质 | |
CN112463123A (zh) | 任务编译方法、装置、网络节点、***及存储介质 | |
CN114116134A (zh) | 智能合约部署和执行方法、设备及存储介质 | |
CN113238795A (zh) | 组件发布方法、装置、电子设备、存储介质及程序产品 | |
CN114115904A (zh) | 信息处理方法、装置、服务器及存储介质 | |
CN113127136B (zh) | Docker镜像生成方法及装置、存储介质、电子设备 | |
CN112114896A (zh) | 一种插件框架及业务功能扩展的方法 | |
CN115291946A (zh) | 鸿蒙***移植方法、装置、电子设备及可读介质 | |
CN117539459B (zh) | 一种api接口配置方法、***及设备 | |
CN115994085A (zh) | 代码覆盖率的测试处理方法、装置、设备及存储介质 | |
CN116775061A (zh) | 微服务应用的部署方法、装置、设备及存储介质 | |
CN114840195B (zh) | 一种针对iOS SDK静态库的私有化方法 | |
CN116302054A (zh) | 一种软件项目的开发方法、装置、存储介质及电子设备 | |
CN115658140A (zh) | 一种sdk的打包方法、装置、终端以及存储介质 | |
US11947966B2 (en) | Identifying computer instructions enclosed by macros and conflicting macros at build time | |
CN115857999A (zh) | 基于vue的***架构改造获得微前端***架构的方法及*** | |
CN115344268A (zh) | 一种多平台嵌入式开发环境编译方法及装置 | |
CN114895916A (zh) | 代码部署方法、装置、存储介质以及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |