CN114637514A - Sdk的编译方法、装置、终端及存储介质 - Google Patents
Sdk的编译方法、装置、终端及存储介质 Download PDFInfo
- Publication number
- CN114637514A CN114637514A CN202210323566.2A CN202210323566A CN114637514A CN 114637514 A CN114637514 A CN 114637514A CN 202210323566 A CN202210323566 A CN 202210323566A CN 114637514 A CN114637514 A CN 114637514A
- Authority
- CN
- China
- Prior art keywords
- compiling
- parameter
- sdk
- preset
- parameter value
- 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.)
- Pending
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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- 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
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
- G06F9/4451—User profiles; Roaming
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种SDK的编译方法、装置、终端及存储介质,包括:通过SDK的第一预设编译脚本的入口接收编译参数集合;利用SDK根目录下的预设文件对编译参数集合中的全部编译参数进行解析,获取全部编译参数对应的参数数量和参数值,若全部编译参数对应的参数数量和参数值满足预设条件,调用第二预设编译脚本将SDK中的源程序转化为目标程序。本发明通过编译脚本对编译参数进行解析,并基于预设条件判断解析后的参数数量和参数值是否满足条件,如果满足,则进行程序转化,以适应不同的基带芯片。不仅降低了工作人员因代码移植而造成的工作量,而且使组件代码的编译管理变得简捷、模块化。
Description
技术领域
本申请涉及计算机编程技术领域,具体而言,涉及一种SDK的编译方法、装置、终端及存储介质。
背景技术
蜂窝数据通信的基带芯片种类丰富,由于不同的基带芯片提供的SDK不同,开发人员在不同的基带芯片上做开发时,需要适应不同的API、开发环境、工具链使用方式等,同时,同一个功能代码,在不同的基带芯片平台中的可移植性变差。因此,开发一种SDK的编译方法,以实现SDK在不同基带芯片上的应用成为亟待解决的问题。
目前,针对SDK的不同基带芯片的应用问题,主要采用SDK的通用编译方法来实现。具体的,先修改SDK文件目标下的makefile文件环境变量,然后根据修改后的makefile文件环境变量,编译出与环境变量相匹配的镜像文件,并通过网络进行验证,验证无误后,执行make编译。
但是,上述编译方法操作繁琐,导致效率低。
发明内容
本申请的主要目的在于提供一种SDK的编译方法、装置、终端及存储介质,以解决相关技术中存在的效率低的问题。
为了实现上述目的,第一方面,本申请提供了一种SDK的编译方法,包括:
通过SDK的第一预设编译脚本的入口接收编译参数集合;
利用SDK根目录下的预设文件对编译参数集合中的全部编译参数进行解析,获取全部编译参数对应的参数数量和参数值;
若全部编译参数对应的参数数量和参数值满足预设条件,调用第二预设编译脚本将SDK中的源程序转化为目标程序。
在一种可能的实现方式中,若全部编译参数对应的参数数量和参数值满足预设条件,调用第二预设编译脚本将SDK中的源程序转化为目标程序,包括:
若参数数量等于第一预设数量,判断全部编译参数对应的参数值是否满足第一预设条件;
若全部编译参数对应的参数值满足第一预设条件,调用第二预设编译脚本将SDK中的源程序转化为目标程序。
在一种可能的实现方式中,全部编译参数包括第一编译参数和第二编译参数;参数值包括第一参数值和第二参数值;
若全部编译参数对应的参数值满足第一预设条件,调用第二预设编译脚本将SDK中的源程序转化为目标程序,包括:
获取第一编译参数对应的第一参数值,若第一参数值为make,获取第二编译参数对应的第二参数值;
若第二参数值为源程序路径,获取源程序版本号;
调用第二预设编译脚本将源程序版本号对应的SDK中的源程序转化为目标程序。
在一种可能的实现方式中,若全部编译参数对应的参数数量和参数值满足预设条件,调用第二预设编译脚本将SDK中的源程序转化为目标程序,包括:
若参数数量等于第二预设数量,判断全部编译参数对应的参数值是否满足第二预设条件;
若全部编译参数对应的参数值满足第二预设条件,调用第二预设编译脚本将SDK中的源程序转化为目标程序。
在一种可能的实现方式中,全部编译参数包括第一编译参数、第二编译参数和第三编译参数;参数值包括第一参数值、第二参数值和第三参数值;
若全部编译参数对应的参数值满足第二预设条件,调用第二预设编译脚本将SDK中的源程序转化为目标程序,包括:
获取第一编译参数对应的第一参数值,若第一参数值为make,获取第二编译参数对应的第二参数值;
若第二参数值为源程序路径,获取第三编译参数对应的第三参数值;
基于第三参数值,调用第二预设编译脚本将SDK中的源程序转化为目标程序。
在一种可能的实现方式中,基于第三参数值,调用第二预设编译脚本将SDK中的源程序转化为目标程序,包括:
若第三参数值中包括目标说明符,判断第三参数值中是否包括目标无线通信模组型号;
若第三参数值中包括目标无线通信模组型号,提取目标无线通信模组型号,并基于目标无线通信模组型号生成源程序版本号;
调用第二预设编译脚本将源程序版本号对应的SDK中的源程序转化为目标程序。
在一种可能的实现方式中,基于第三参数值,调用第二预设编译脚本将SDK中的源程序转化为目标程序,包括:
若第三参数值中不包括目标说明符,将第三参数值作为源程序版本号;
调用第二预设编译脚本将源程序版本号对应的SDK中的源程序转化为目标程序。
在一种可能的实现方式中,方法还包括:
若全部编译参数对应的参数值满足第三预设条件,对SDK进行功能配置。
在一种可能的实现方式中,全部编译参数包括第一编译参数和第二编译参数;参数值包括第一参数值和第二参数值;
若全部编译参数对应的参数值满足第三预设条件,对SDK进行功能配置,包括:
获取第一编译参数对应的第一参数值,若第一参数值为menu config,获取第二编译参数对应的第二参数值;
若第二参数值为目标无线通信模组型号,对SDK进行功能配置。
第二方面,本发明实施例提供了一种SDK的编译装置,包括:
参数接收模块,用于通过SDK的第一预设编译脚本的入口接收编译参数集合;
参数解析模块,用于利用SDK根目录下的预设文件对编译参数集合中的全部编译参数进行解析,获取全部编译参数对应的参数数量和参数值;
编译模块,用于若全部编译参数对应的参数数量和参数值满足预设条件,调用第二预设编译脚本将SDK中的源程序转化为目标程序。
第三方面,本发明实施例提供了一种终端,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如上任一种SDK的编译方法的步骤。
第四方面,本发明实施例提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现如上任一种SDK的编译方法的步骤。
本发明实施例提供了一种SDK的编译方法、装置、终端及存储介质,包括:通过SDK的第一预设编译脚本的入口接收编译参数集合,然后利用SDK根目录下的预设文件对编译参数集合中的全部编译参数进行解析,获取全部编译参数对应的参数数量和参数值,若全部编译参数对应的参数数量和参数值满足预设条件,调用第二预设编译脚本将SDK中的源程序转化为目标程序。本发明通过编译脚本对编译参数进行解析,并基于预设条件判断解析后的参数数量和参数值是否满足条件,如果满足,则进行程序转化,以适应不同的基带芯片。不仅降低了工作人员因代码移植而造成的工作量,而且使组件代码的编译管理变得简捷、模块化。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,使得本申请的其它特征、目的和优点变得更明显。本申请的示意性实施例附图及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是本发明实施例提供的一种SDK的编译方法的实现流程图;
图2是本发明实施例提供的一种SDK的编译装置的结构示意图;
图3是本发明实施例提供的终端的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。
应当理解,在本发明的各种实施例中,各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
应当理解,在本发明中,“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
应当理解,在本发明中,“多个”是指两个或两个以上。“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。“包含A、B和C”、“包含A、B、C”是指A、B、C三者都包含,“包含A、B或C”是指包含A、B、C三者之一,“包含A、B和/或C”是指包含A、B、C三者中任1个或任2个或3个。
应当理解,在本发明中,“与A对应的B”、“与A相对应的B”、“A与B相对应”或者“B与A相对应”,表示B与A相关联,根据A可以确定B。根据A确定B并不意味着仅仅根据A确定B,还可以根据A和/或其他信息确定B。A与B的匹配,是A与B的相似度大于或等于预设的阈值。
取决于语境,如在此所使用的“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。
为便于理解本发明方案,对相关技术进行解释说明,具体如下:
蜂窝数据通信的基带芯片原厂较多,每个模组通信厂商均会同时涉及多家原厂的基带芯片。而不同的基带芯片原厂提供的SDK,在API定义和工具链上均有很大不同。开发人员在不同厂商的基带芯片上做开发时,需要适应不同的API、开发环境、工具链使用方式等,增加了学习升本、效率也比较低下,同时同一个功能代码,在不同原厂的基带芯片平台中的可移植性变差。
绝大多数基带芯片原厂提供的SDK,在代码文件编译管理脚本编写上很繁琐、混乱。开发者不能很好地在当前组件脚本内只专注于本组件内的元素(组件内部需要编译的C/C++源文件、特有的编译选项、依赖的其他组件的相对路径、本组件允许对外开放的头文件路径和宏定义等),还要将其依赖的其他组件内的元素在本组件内进行展开编写,使得耦合性很强,主体与外界的边界模糊、十分不利于功能裁剪。此外,绝大多数基带芯片原厂提供的SDK,没有集成menuconfig功能,使得系统功能扩充和裁剪变得很繁琐。
基于上述问题,开发一套跨不同基带芯片平台的SDK,可封装出可跨不同基带芯片平台使用的API。对开发人员表现为:在使用同一套软件代码操作不同的基带芯片,不存在因代码移植而造成的工作量。使组件代码的编译管理变得简捷、模块化。开发人员只需要在当前组件脚本内指定需要编译的C/C++源文件、特有的编译选项、依赖的其他组件的相对路径、本组件允许对外开放的头文件路径和宏定义等即可,模块化较强,可在系统中像搭积木一样组合、拆解。此外,还提供menuconfig功能,通过可视化命令行界面,对系统内核和组件功能进行开关配置。
HeliosSDK根目录根据整体的功能块,划分了components、config、demos、docs、peripheral、sample、services、system、tools、utilities等目录,同时根目录下还放置有证书声明文件LICENSE,使用说明README.MD,及编译脚本。其中,system目录下的platform文件夹,根据平台名称创建了不同的子目录,及platform.json和platform.mk文件。所有跨平台的内容均放置于此目录下,目录结构如下所示:.
|--ASR
|--Unisoc
|--platform.json
`--platform.mk
其中,ASR:存放ASR平台相关文件的目录,Unisoc:存放Unisoc平台相关文件的目录,platform.json:记录了HeliosSDK所支持的板级型号,即无线通信模组型号,platform.mk:平台组件脚本,而platform.json的内容如下:
以上内容表示Unisoc和ASR两个平台分别支持了哪些型号的无线通信模组。
每个平台子目录下存放了该平台共有的启动文件、脚本等,还包含了一个名为boards的目录,该目录下按照板级型号进行分类,为每个模组型号创建一个文件夹,提供了被上层API调用到的各个板级的驱动接口库文件,不同型号之间的差异在此进行区分。
以system/platform/ASR目录为例,其目录结构如下:.
|--ASR.mk
|--boards
||--EC600NCN_LA
||--EC600NCN_LC
||--EC600NCN_LD
||--EC600NCN_LE
||--EC600SCN_LA
||--EC600SCN_LB
|`--EC800NCN_LA
|--main
|`--helios_main.c
`--scripts
|--linkscript.ld
|--private.cfg
`--private.mk
通过上述HeliosSDK,可实现如下功能:
第一,可以以代理的方式接收工具链的环境变量和参数
HeliosSDK根目录下的build.sh脚本是编译工作的入口,其被helios.exe调用(下文详述),作为helios-toolchain的执行代理,它接收helios.exe设置的一切环境变量和参数,做好编译前的准备工作,而后调用HeliosSDK根目录下的main.py文件,解析build.sh脚本传递进来的参数,开启编译流程。编译命令的使用方法撰写在根目录的README.MD文件中。
第二,简捷、模块化的组件编译脚本
开发人员向HeliosSDK中添加功能组件时,编译脚本的编写非常简捷,并且其只要关注本功能组件内部的元素即可,具有高度的模块化。只需通过一行代码,将该组件的相对于根目录的路径添加进依赖该组件的上级组件的脚本中,即让该组件参与编译流程。想要裁减掉该功能,删除该行代码即可。
组件编译脚本全部内容的示例如下:
NAME=component_name#组件名称,建议和所在目录名称一致
GLOBAL_INCS=public/inc#允许外部引用的头文件路径,不在此列的头文件路径,其他组件无法直接引用
GLOBAL_DEFINE=PUBLIC_MACRO#当前组件内定义的、允许外部组件引用的宏。
$(NAME)_CFLAGS=-Wno-error=incompatible-pointer-types#仅当前组件内部可引用的编译选项
$(NAME)_ARCHIVES:=src/archive.a#当前组件内参与编译的库文件
$(NAME)_SRCS:=src/source.c asm.s#当前组件内参与编译的源码文件,包括c和汇编
$(NAME)_INCS:=local/Inc#仅当前组件内部可引用的头文件路径,在此列的头文件路径,其他组件无法直接引用
$(NAME)_DEFINE:=LOCAL_MACRO#当前组件内定义的、仅组件内部可引用的宏,不允许外部组件引用。
$(NAME)_COMPONENTS:=third_party/LinkSDK\
system/protocols/ftp#当前组件依赖的其他组件的相对路径(相对于根目录)
上述示例中,$(NAME)_COMPONENTS变量后的值,就是该组件依赖的其他组件的路径(相对于根目录)。同样,将该组件的路径(相对于根目录)添加至其他组件的$(NAME)_COMPONENTS变量值中,即可实现那个组件对该组件的依赖。该组件中以GLOBAL打头的变量,都是对外声明的全局变量,凡是依赖了该组件的其他组件,均可使用这些全局变量的值。这些GLOBAL变量的含义见上述示例的注释。
我们假设有三个组件A、B、C,A组件依赖B组件、B组件依赖C组件,则A组件也自动依赖了C组件。
依赖方只有产生了对被依赖方的依赖关系后,被依赖的组件对外声明的、允许外部引用的头文件路径和宏定义才能被依赖方引用。
开发人员可以在其自己维护的组件中灵活地控制本组件中哪些代码文件可以被编译、哪些头文件和宏定义仅允许本组件内部使用、哪些头文件和宏定义允许外部组件引用、本组件内部的代码可以添加不同于全局的编译选项,以及本组件的代码依赖哪些外部组件等等。
开发人员功能组件脚本的简捷处理依赖于后台相对强大的脚本文件compile.py。该脚本文件从最上层的应用代码组件开始,通过递归算法逐级向下查找所有被依赖的组件,及每个组件的所有编译选项(包括被编译文件列表、编译选项、头文件路径、脚本中定义的宏定义、参与链接的库文件等),而后调用编译规则的脚本compilerules.mk进行编译,编译完成后调用链接脚本link.mk进行链接工作,生成二进制可执行文件。
第三、menuconfig可视化功能配置界面
HeliosSDK功能扩充和裁剪,除了通过在组件脚本中增加或删除被依赖组件路径的方法,还可通过menuconfig的方式进行,一般用于HeliosSDK内核功能的裁剪。
此外,还开发一套兼容不同基带芯片平台的工具链。不同的基带芯片原厂提供的工具链各不相同,开发人员要熟悉不同的工具链的用法并根据需要反复切换,会降低开发效率。
为此,开发了一套名为helios-toolchain的工具链。该工具链可在Windows和Linux系统上运行,同时支持上海移远通信股份有限公司由众多不同原厂基带芯片设计而成的无线通信模组,内置了不同平台的编译器、CPython、Git、make、7z等开源工具。helios-toolchain工具链的工作原理(以Windows系统为例):以管理员身份运行helios-toolchain.exe,安装完成后,会自动将helios.exe的目录设置到系统环境变量PATH的值中。在工作目录的命令行窗口中执行helios命令,helios.exe会调用其所在目录下的_.sh脚本设置临时环境变量,仅在当前窗口生效,包括编译器、CPython、Git、make、7z等被内置工具的可执行文件路径。(主机系统Windows上如果安装了相同的工具的其他版本,也只会使用helios-toolchain安装目录中的,由于没有修改全局的环境变量,因此用户原来的开发环境不受影响。)临时环境变量设置完毕后,_.sh脚本会进入到工作目录,并调用工作目录下build.sh脚本,并将helios命令后的参数带入,开始进行编译工作。
下面以具体地实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图通过具体实施例来进行说明。
在一个实施例中,如图1所示,提供了一种SDK的编译方法,包括以下步骤:
步骤S101:通过SDK的第一预设编译脚本的入口接收编译参数集合。
具体的,编译参数集合中包含预设数量的编译参数,其中,预设数量根据具体情况而定,可为0、1或2等。HeliosSDK根目录下的build.sh脚本(即第一预设编译脚本)是编译工作的入口,其被helios.exe调用,作为helios-toolchain的执行代理,它接收helios.exe设置的一切环境变量、参数以及用户对应的编译参数集合,做好编译前的准备工作,而后调用HeliosSDK根目录下的main.py文件(即第二预设编译脚本),解析build.sh脚本传递进来的参数,开启编译流程。
步骤S102:利用SDK根目录下的预设文件对编译参数集合中的全部编译参数进行解析,获取全部编译参数对应的参数数量和参数值。
具体的,当接收到用户的编译参数集合后,会通过预设文件(main.py)先对编译参数集合中的参数进行解析,以确定编译参数集合中的全部编译参数的参数数量以及各个编译参数的参数值。
步骤S103:若全部编译参数对应的参数数量和参数值满足预设条件,调用第二预设编译脚本将SDK中的源程序转化为目标程序。
完成解析后,通过对参数值以及参数数量的进一步判断来实现源程序的转换,以适应不同的基带芯片。具体如下:
第一种情况:若参数数量等于第一预设数量,判断全部编译参数对应的参数值是否满足第一预设条件,其中,全部编译参数包括第一编译参数和第二编译参数,参数值包括第一参数值和第二参数值;获取第一编译参数对应的第一参数值,若第一参数值为make,获取第二编译参数对应的第二参数值;若第二参数值为源程序路径,获取源程序版本号;调用第二预设编译脚本将源程序版本号对应的SDK中的源程序转化为目标程序。其中,第二预设编译脚本为makefile。
第二种情况:若参数数量等于第二预设数量,判断全部编译参数对应的参数值是否满足第二预设条件,其中,全部编译参数包括第一编译参数、第二编译参数和第三编译参数,参数值包括第一参数值、第二参数值和第三参数值;获取第一编译参数对应的第一参数值,若第一参数值为make,获取第二编译参数对应的第二参数值;若第二参数值为源程序路径,获取第三编译参数对应的第三参数值;基于第三参数值,调用第二预设编译脚本将SDK中的源程序转化为目标程序。
其中,基于第三参数值,调用第二预设编译脚本将SDK中的源程序转化为目标程序,分为两种情况:第一,若第三参数值中包括目标说明符,判断第三参数值中是否包括目标无线通信模组型号;若第三参数值中包括目标无线通信模组型号,提取目标无线通信模组型号,并基于目标无线通信模组型号生成源程序版本号;调用第二预设编译脚本将源程序版本号对应的SDK中的源程序转化为目标程序。第二,若第三参数值中不包括目标说明符,将第三参数值作为源程序版本号;调用第二预设编译脚本将源程序版本号对应的SDK中的源程序转化为目标程序。其中,第二预设编译脚本为makefile。
本发明实施例提供了一种SDK的编译方法,包括:通过SDK的第一预设编译脚本的入口接收编译参数集合,然后利用SDK根目录下的预设文件对编译参数集合中的全部编译参数进行解析,获取全部编译参数对应的参数数量和参数值,若全部编译参数对应的参数数量和参数值满足预设条件,调用第二预设编译脚本将SDK中的源程序转化为目标程序。本发明通过编译脚本对编译参数进行解析,并基于预设条件判断解析后的参数数量和参数值是否满足条件,如果满足,则进行程序转化,以适应不同的基带芯片。不仅降低了工作人员因代码移植而造成的工作量,而且使组件代码的编译管理变得简捷、模块化。
此外,还提供了menu config可视化功能配置界面,HeliosSDK功能扩充和裁剪,除了通过在组件脚本中增加或删除被依赖组件路径的方法,还可通过menu config的方式进行,一般用于HeliosSDK内核功能的裁剪。具体实施方式如下:若全部编译参数对应的参数值满足第三预设条件,对SDK进行功能配置,其中,全部编译参数包括第一编译参数和第二编译参数,参数值包括第一参数值和第二参数值。具体的,获取第一编译参数对应的第一参数值,若第一参数值为menu config,获取第二编译参数对应的第二参数值;若第二参数值为目标无线通信模组型号,对SDK进行功能配置。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
以下为本发明的装置实施例,对于其中未详尽描述的细节,可以参考上述对应的方法实施例。
图2示出了本发明实施例提供的一种SDK的编译装置的结构示意图,为了便于说明,仅示出了与本发明实施例相关的部分,一种SDK的编译装置包括参数接收模块21、参数解析模块22和编译模块23,具体如下:
参数接收模块21,用于通过SDK的第一预设编译脚本的入口接收编译参数集合;
参数解析模块22,用于利用SDK根目录下的预设文件对编译参数集合中的全部编译参数进行解析,获取全部编译参数对应的参数数量和参数值;
编译模块23,用于若全部编译参数对应的参数数量和参数值满足预设条件,调用第二预设编译脚本将SDK中的源程序转化为目标程序。
在一种可能的实现方式中,编译模块23包括:
第一判断子模块,用于若参数数量等于第一预设数量,判断全部编译参数对应的参数值是否满足第一预设条件;
第一编译子模块,用于若全部编译参数对应的参数值满足第一预设条件,调用第二预设编译脚本将SDK中的源程序转化为目标程序。
在一种可能的实现方式中,全部编译参数包括第一编译参数和第二编译参数;参数值包括第一参数值和第二参数值;
第一编译子模块包括:
第一判断单元,用于获取第一编译参数对应的第一参数值,若第一参数值为make,获取第二编译参数对应的第二参数值;
第二判断单元,用于若第二参数值为源程序路径,获取源程序版本号;
第一编译单元,用于调用第二预设编译脚本将源程序版本号对应的SDK中的源程序转化为目标程序。
在一种可能的实现方式中,编译模块23包括:
第二判断子模块,用于若参数数量等于第二预设数量,判断全部编译参数对应的参数值是否满足第二预设条件;
第二编译子模块,用于若全部编译参数对应的参数值满足第二预设条件,调用第二预设编译脚本将SDK中的源程序转化为目标程序。
在一种可能的实现方式中,全部编译参数包括第一编译参数、第二编译参数和第三编译参数;参数值包括第一参数值、第二参数值和第三参数值;
第二编译子模块包括:
第三判断单元,用于获取第一编译参数对应的第一参数值,若第一参数值为make,获取第二编译参数对应的第二参数值;
第四判断单元,用于若第二参数值为源程序路径,获取第三编译参数对应的第三参数值;
第二编译单元,用于基于第三参数值,调用第二预设编译脚本将SDK中的源程序转化为目标程序。
在一种可能的实现方式中,第二编译单元包括:
第一判断子单元,用于若第三参数值中包括目标说明符,判断第三参数值中是否包括目标无线通信模组型号;
版本号生成子单元,用于若第三参数值中包括目标无线通信模组型号,提取目标无线通信模组型号,并基于目标无线通信模组型号生成源程序版本号;
第二编译子单元,用于调用第二预设编译脚本将源程序版本号对应的SDK中的源程序转化为目标程序。
在一种可能的实现方式中,第二编译单元包括:
第二判断子单元,用于若第三参数值中不包括目标说明符,将第三参数值作为源程序版本号;
第三编译子单元,用于调用第二预设编译脚本将源程序版本号对应的SDK中的源程序转化为目标程序。
在一种可能的实现方式中,方法还包括:
功能配置模块,用于若全部编译参数对应的参数值满足第三预设条件,对SDK进行功能配置。
在一种可能的实现方式中,全部编译参数包括第一编译参数和第二编译参数;参数值包括第一参数值和第二参数值;
功能配置模块包括:
参数获取子模块,用于获取第一编译参数对应的第一参数值,若第一参数值为menu config,获取第二编译参数对应的第二参数值;
功能配置子模块,用于若第二参数值为目标无线通信模组型号,对SDK进行功能配置。
图3是本发明实施例提供的终端的示意图。如图3所示,该实施例的终端3包括:处理器30、存储器31以及存储在存储器31中并可在处理器30上运行的计算机程序32。处理器30执行计算机程序32时实现上述各个SDK的编译方法实施例中的步骤,例如图1所示的步骤101至步骤103。或者,处理器30执行计算机程序32时实现上述各个SDK的编译装置实施例中各模块/单元的功能,例如图2所示模块/单元21至23的功能。
本发明还提供一种可读存储介质,可读存储介质中存储有计算机程序,计算机程序被处理器执行时用于实现上述的各种实施方式提供的SDK的编译方法。
其中,可读存储介质可以是计算机存储介质,也可以是通信介质。通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。计算机存储介质可以是通用或专用计算机能够存取的任何可用介质。例如,可读存储介质耦合至处理器,从而使处理器能够从该可读存储介质读取信息,且可向该可读存储介质写入信息。当然,可读存储介质也可以是处理器的组成部分。处理器和可读存储介质可以位于专用集成电路(ApplicationSpecific Integrated Circuits,简称:ASIC)中。另外,该ASIC可以位于用户设备中。当然,处理器和可读存储介质也可以作为分立组件存在于通信设备中。可读存储介质可以是只读存储器(ROM)、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
本发明还提供一种程序产品,该程序产品包括执行指令,该执行指令存储在可读存储介质中。设备的至少一个处理器可以从可读存储介质读取该执行指令,至少一个处理器执行该执行指令使得设备实施上述的各种实施方式提供的SDK的编译方法。
在上述设备的实施例中,应理解,处理器可以是中央处理单元(英文:CentralProcessing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:DigitalSignal Processor,简称:DSP)、专用集成电路(英文:Application Specific IntegratedCircuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (12)
1.一种SDK的编译方法,其特征在于,包括:
通过SDK的第一预设编译脚本的入口接收编译参数集合;
利用所述SDK根目录下的预设文件对所述编译参数集合中的全部编译参数进行解析,获取所述全部编译参数对应的参数数量和参数值;
若所述全部编译参数对应的参数数量和参数值满足预设条件,调用第二预设编译脚本将所述SDK中的源程序转化为目标程序。
2.如权利要求1所述SDK的编译方法,其特征在于,所述若所述全部编译参数对应的参数数量和参数值满足预设条件,调用第二预设编译脚本将所述SDK中的源程序转化为目标程序,包括:
若所述参数数量等于第一预设数量,判断所述全部编译参数对应的参数值是否满足第一预设条件;
若所述全部编译参数对应的参数值满足第一预设条件,调用第二预设编译脚本将所述SDK中的源程序转化为目标程序。
3.如权利要求2所述SDK的编译方法,其特征在于,所述全部编译参数包括第一编译参数和第二编译参数;所述参数值包括第一参数值和第二参数值;
所述若所述全部编译参数对应的参数值满足第一预设条件,调用第二预设编译脚本将所述SDK中的源程序转化为目标程序,包括:
获取所述第一编译参数对应的第一参数值,若所述第一参数值为make,获取所述第二编译参数对应的第二参数值;
若所述第二参数值为源程序路径,获取源程序版本号;
调用第二预设编译脚本将所述源程序版本号对应的SDK中的源程序转化为目标程序。
4.如权利要求1所述SDK的编译方法,其特征在于,所述若所述全部编译参数对应的参数数量和参数值满足预设条件,调用第二预设编译脚本将所述SDK中的源程序转化为目标程序,包括:
若所述参数数量等于第二预设数量,判断所述全部编译参数对应的参数值是否满足第二预设条件;
若所述全部编译参数对应的参数值满足第二预设条件,调用第二预设编译脚本将所述SDK中的源程序转化为目标程序。
5.如权利要求4所述SDK的编译方法,其特征在于,所述全部编译参数包括第一编译参数、第二编译参数和第三编译参数;所述参数值包括第一参数值、第二参数值和第三参数值;
所述若所述全部编译参数对应的参数值满足第二预设条件,调用第二预设编译脚本将所述SDK中的源程序转化为目标程序,包括:
获取所述第一编译参数对应的第一参数值,若所述第一参数值为make,获取所述第二编译参数对应的第二参数值;
若所述第二参数值为源程序路径,获取所述第三编译参数对应的第三参数值;
基于所述第三参数值,调用第二预设编译脚本将所述SDK中的源程序转化为目标程序。
6.如权利要求5所述SDK的编译方法,其特征在于,所述基于所述第三参数值,调用第二预设编译脚本将所述SDK中的源程序转化为目标程序,包括:
若所述第三参数值中包括目标说明符,判断所述第三参数值中是否包括目标无线通信模组型号;
若所述第三参数值中包括所述目标无线通信模组型号,提取所述目标无线通信模组型号,并基于所述目标无线通信模组型号生成源程序版本号;
调用第二预设编译脚本将所述源程序版本号对应的SDK中的源程序转化为目标程序。
7.如权利要求5所述SDK的编译方法,其特征在于,所述基于所述第三参数值,调用第二预设编译脚本将所述SDK中的源程序转化为目标程序,包括:
若所述第三参数值中不包括目标说明符,将所述第三参数值作为源程序版本号;
调用第二预设编译脚本将所述源程序版本号对应的SDK中的源程序转化为目标程序。
8.如权利要求2所述SDK的编译方法,其特征在于,所述方法还包括:
若所述全部编译参数对应的参数值满足第三预设条件,对所述SDK进行功能配置。
9.如权利要求8所述SDK的编译方法,其特征在于,所述全部编译参数包括第一编译参数和第二编译参数;所述参数值包括第一参数值和第二参数值;
所述若所述全部编译参数对应的参数值满足第三预设条件,对所述SDK进行功能配置,包括:
获取所述第一编译参数对应的第一参数值,若所述第一参数值为menu config,获取所述第二编译参数对应的第二参数值;
若所述第二参数值为目标无线通信模组型号,对所述SDK进行功能配置。
10.一种SDK的编译装置,其特征在于,包括:
参数接收模块,用于通过SDK的第一预设编译脚本的入口接收编译参数集合;
参数解析模块,用于利用所述SDK根目录下的预设文件对所述编译参数集合中的全部编译参数进行解析,获取所述全部编译参数对应的参数数量和参数值;
编译模块,用于若所述全部编译参数对应的参数数量和参数值满足预设条件,调用第二预设编译脚本将所述SDK中的源程序转化为目标程序。
11.一种终端,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至9中任一项所述SDK的编译方法的步骤。
12.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行所述计算机程序时实现如权利要求1至9中任一项所述SDK的编译方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210323566.2A CN114637514A (zh) | 2022-03-29 | 2022-03-29 | Sdk的编译方法、装置、终端及存储介质 |
PCT/CN2022/130388 WO2023184981A1 (zh) | 2022-03-29 | 2022-11-07 | Sdk的编译方法、装置、终端及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210323566.2A CN114637514A (zh) | 2022-03-29 | 2022-03-29 | Sdk的编译方法、装置、终端及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114637514A true CN114637514A (zh) | 2022-06-17 |
Family
ID=81950845
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210323566.2A Pending CN114637514A (zh) | 2022-03-29 | 2022-03-29 | Sdk的编译方法、装置、终端及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114637514A (zh) |
WO (1) | WO2023184981A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023184981A1 (zh) * | 2022-03-29 | 2023-10-05 | 上海移远通信技术股份有限公司 | Sdk的编译方法、装置、终端及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2698066A1 (en) * | 2009-07-31 | 2011-01-31 | Nitobi Software Inc. | System and method for remotely compiling multi-platform native applications for mobile devices |
CN103713896B (zh) * | 2013-12-17 | 2017-01-04 | 北京京东尚科信息技术有限公司 | 用于访问服务器的软件开发工具包生成方法及装置 |
CN111638906B (zh) * | 2020-05-15 | 2023-02-03 | 郑州阿帕斯数云信息科技有限公司 | 一种软件开发工具包sdk接入方法、装置和系统 |
CN112181388B (zh) * | 2020-09-25 | 2024-03-01 | 广州虎牙科技有限公司 | Sdk组件的初始化方法、装置、存储介质及控制终端 |
CN114637514A (zh) * | 2022-03-29 | 2022-06-17 | 上海移远通信技术股份有限公司 | Sdk的编译方法、装置、终端及存储介质 |
-
2022
- 2022-03-29 CN CN202210323566.2A patent/CN114637514A/zh active Pending
- 2022-11-07 WO PCT/CN2022/130388 patent/WO2023184981A1/zh unknown
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023184981A1 (zh) * | 2022-03-29 | 2023-10-05 | 上海移远通信技术股份有限公司 | Sdk的编译方法、装置、终端及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2023184981A1 (zh) | 2023-10-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110321131B (zh) | 业务组件打包方法、系统及服务器 | |
CN109710260B (zh) | 一种基于多平台的小程序代码转换方法 | |
WO2023061874A1 (en) | Checking source code validity at time of code update | |
US10083029B2 (en) | Detect application defects by correlating contracts in application dependencies | |
CN110928548A (zh) | 一种数据处理方法以及设备 | |
CN112052037A (zh) | 一种应用软件开发方法、装置、设备及介质 | |
CN114637514A (zh) | Sdk的编译方法、装置、终端及存储介质 | |
CN112559344A (zh) | 远程mock测试方法及系统 | |
CN111580821B (zh) | 脚本绑定方法、装置、电子设备及计算机可读存储介质 | |
CN113360156B (zh) | 一种ios编译方法及相关设备 | |
CN111552480B (zh) | 跨平台编译方法、装置、设备及可读存储介质 | |
CN117707499A (zh) | 基于虚拟化技术的多源模型算法解析器插件及编译算法 | |
CN109614081B (zh) | 浏览器实现方法、装置及移动终端 | |
US9396239B2 (en) | Compiling method, storage medium and compiling apparatus | |
KR20080013422A (ko) | 소프트웨어 프로젝트 빌드 방법 | |
CN112711427A (zh) | 一种镜像文件的获取方法以及装置 | |
CN113434213B (zh) | 一种终端的程序运行方法以及装置 | |
US11947966B2 (en) | Identifying computer instructions enclosed by macros and conflicting macros at build time | |
CN114416202A (zh) | 一种移动端sdk调用方法及系统 | |
CN114281341A (zh) | 数据结构定义文件的编译方法、装置、计算机设备及介质 | |
Abate et al. | Bootstrapping software distributions | |
CN110737429A (zh) | 一种利用Makefile自身的依赖关系的模块化编译方法和装置 | |
CN113608996B (zh) | 一种镜像编译测试方法、系统、装置及可读存储介质 | |
CN112988260B (zh) | 应用冷启动优化方法、装置、计算机设备及存储介质 | |
JP2002132502A (ja) | 言語機能解釈による分散オブジェクト自動生成システム及び方法 |
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 |