CN102193812B - 一种代码编译方法、主机及系统 - Google Patents
一种代码编译方法、主机及系统 Download PDFInfo
- Publication number
- CN102193812B CN102193812B CN201110149093.0A CN201110149093A CN102193812B CN 102193812 B CN102193812 B CN 102193812B CN 201110149093 A CN201110149093 A CN 201110149093A CN 102193812 B CN102193812 B CN 102193812B
- Authority
- CN
- China
- Prior art keywords
- compiling
- code
- compiler
- extension set
- compiled
- 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
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请公开了一种代码编译方法、主机及系统,该方法包括:将待编译代码分解成多个模块代码;指示多个编译分机中的每一个编译分机分别获取一个模块代码并编译成可执行子文件;当所有模块代码均编译成功时,从多个编译分机中选取一个编译分机,控制该编译分机将与所有模块代码相对应的可执行子文件链接成可执行文件。与现有技术相比,本申请实施例提供的该方法大大节省了编译时间,提高了编译速度,进而可以缩短软件的开发周期,降低软件的开发成本。
Description
技术领域
本申请涉及电数字数据处理技术领域,特别是涉及一种代码编译方法、主机及系统。
背景技术
在软件的开发过程中,需要研发人员对软件代码进行不断的修改、完善,还需要测试人员对软件代码进行测试,所以在软件的最终产品发布前,其通常为对软件代码进行修改、测试这样一个迭代过程。对于一些大型的软件,由于其源代码较多,在编译测试的过程中,会消耗较多的开发时间,尤其是在嵌入式软件开发过程中,还需要使用交叉编译环境,所以耗时更多。编译作为软件开发过程中一个必不可少的环节,如果编译过程耗时较多,那么将会影响到整个软件的开发效率,延长了软件的开发周期,并且增加了软件的开发成本。
目前通常采用编译服务器来替代原始的人工编译方式,但采用编译服务器进行编译时,只是将每次编译过程中的命令写成脚本,放到一台专门的编译服务器上自动执行编译过程,这虽然可以使得编译环节自动化,减少了相邻两次编译过程之间的时间,但并未减少编译本身消耗的时间。另外,由于编译服务器通常为单主机编译服务器,在编译过程中,当多个测试人员同时向编译服务器请求编译时,编译服务器将同时运行多个编译任务,导致编译性能降低,还会使得编译时间增加,所以现有的采用单主机编译服务器进行编译无法满足软件开发的需要。
因此如何提高编译速度,减少编译消耗时间成为当前软件开发过程中亟待解决的问题。
发明内容
有鉴于此,本申请实施例提供一种代码编译方法、主机及系统,该方法将与待编译代码分解成多个模块代码,并采用分布式编译方式对多个模块代码分别进行编译,使得多个模块代码可以同时进行编译,提高了待编译代码的编译速度,减少了编译消耗时间。
为了实现上述目的,本申请实施例提供的技术方案如下:
一种代码编译方法,包括:
将待编译代码分解成多个模块代码;
指示多个编译分机中每一个编译分机分别获取一个模块代码并编译成可执行子文件;
当所述待编译代码所对应的所有模块代码均编译成可执行子文件后,从所述多个编译分机中选取一个编译分机,并控制该编译分机将与所有模块代码相对应的可执行子文件链接成可执行文件。
优选地,链接成可执行文件之后,该方法进一步包括:
向用户发送所述可执行文件的存储地址。
优选地,将待编译代码按照与其相对应软件的模块分解成多个模块代码,包括:
接收用户输入的多个编译请求并依次存储,所述编译请求中携带有待编译代码的信息;
查询所有编译请求的状态,获取状态为未编译的编译请求;
按照与待编译代码相对应软件的功能模块将所述未编译的编译请求分解成多个编译子请求并存储,每个编译子请求对应一个模块代码。
优选地,指示多个编译分机中每一个编译分机分别获取一个模块代码并编译成可执行子文件,包括:
查询编译子请求的状态,并获取状态为未编译的编译子请求的标识;
将获取的所述编译子请求的标识分别发送给多个编译分机中的每一个编译分机;
指示每一个编译分机依据获取与其分配的编译子请求的标识相对应的编译子请求;
控制每个编译分机下载与其获取的编译子请求相对应的模块代码并编译成可执行子文件。
优选地,从所述多个编译分机中选取一个编译分机,并控制该编译分机将与所有模块代码相对应的可执行子文件链接成可执行文件,包括:
获取从多个编译分机中选取一个空闲状态的编译分机;
获取编译请求中所有编译子请求均编译成功的编译请求的标识,并将获取的编译请求的标识发送给该编译分机;
控制该编译分机下载与获取的编译请求标识中所有编译子请求相对应的多个可执行子文件并链接成可执行文件并存储。
一种代码编译主机,包括:
代码分解单元,用于将待编译代码分解成多个模块代码;
编译控制单元,用于生成指示多个编译分机中每一个编译分机分别获取一个模块代码并编译成可执行子文件的编译指令,且将所述编译指令发给每一编译分机;
编译成功确定单元,用于判断所述待编译代码中所有模块代码是否均编译成功;
编译分机选取单元,用于从所述多个编译分机中选取一个编译分机;
链接控制单元,用于当所有模块代码均编译成功时,生成控制所选取的编译分机将与所有模块代码相对应的可执行子文件并链接成可执行文件的链接指令,且将所述链接指令发送给所选取的编译分机。
优选地,该编译主机还包括:
输出单元,用于向用户发送可执行子文件的存储地址。
优选地,所述代码分解单元包括:
编译请求接收单元,用于接收用户输入的多个编译请求并依次存储;
编译请求获取单元,用于查询所有编译请求的状态,并获取状态为未编译的编译请求;
编译请求分解单元,用于按照与待编译代码相对应软件的功能模块将所述未编译的编译请求分解成多个编译子请求并存储。
优选地,所述编译控制单元包括:
标识获取单元,用于查询编译子请求的状态并获取状态为未编译的编译子请求的标识;
标识分配单元,用于将所述未编译的编译子请求的标识分别发送给多个编译分机中的每一个编译分机;
编译指令生成单元,用于生成编译指令并发送给每一个编译分机,指示每一个编译分机依据获取与其分配的编译子请求的标识相对应的编译子请求,控制每个编译分机下载与其获取的编译子请求相对应的模块代码并编译成可执行子文件。
一种代码编译系统,包括:代码服务器、编译主机和多个编译分机,其中:
所述代码服务器用于存储并提供不同版本的代码;
所述编译主机用于将待编译代码分解成多个模块代码,指示多个编译分机中每一个编译分机分别获取一个模块代码并编译成可执行子文件;并当所述待编译代码所对应的所有模块代码均编译成可执行子文件后,从所述多个编译分机中选取一个编译分机,控制该编译分机将与所有模块代码相对应的可执行子文件链接成可执行文件;
所述编译分机用于受所述编译主机控制执行编译或链接。
优选地,所述编译主机包括:
代码分解单元,用于将待编译代码按照与其相对应软件的模块分解成多个模块代码;
编译控制单元,用于生成指示多个编译分机中每一个编译分机分别获取一个模块代码并编译成可执行子文件的编译指令,且将所述编译指令发给每一编译分机;
编译成功确定单元,用于判断所述待编译代码中所有模块代码是否均编译成功;
编译分机选取单元,用于从所述多个编译分机中选取一个编译分机;
链接控制单元,用于当所有模块代码均编译成功时,生成控制所选取的编译分机将与所有模块代码相对应的可执行子文件并链接成可执行文件的链接指令,且将所述链接指令发送给所选取的编译分机。
优选地,所述编译主机还包括:
输出单元,用于向用户发送可执行子文件的存储地址。
优选地,所述代码分解单元包括:
编译请求接收单元,用于接收用户输入的多个编译请求并依次存储;
编译请求获取单元,用于查询所有编译请求的状态,并获取状态为未编译的编译请求;
编译请求分解单元,用于按照与待编译代码相对应软件的功能模块将所述未编译的编译请求分解成多个编译子请求并存储。
优选地,该系统还包括:
数据库,用于存储编译请求、编译子请求、可执行子文件或可执行文件。
由以上技术方案可见,本申请实施例提供的该方法,在对接收到代码的编译请求后,首先将该编译请求按照模块分解多个编译子请求,即将代码按照模块分解成多个模块,然后指示多个编译分机中每一个编译分机分别获取与一个编译子请求相对应的模块代码,并且将获取模块代码编译成可执行子文件,当编译请求中的所有编译子请求编译成功后,再指示一个编译分机将所有编译子请求编译得到的可执行子文件进行链接,得到与用户输入的编译请求相对应代码的可执行文件,完成编译过程,最后将编译结果向用户发送,编译结果为可执行文件的存储地址。
假设待编译代码所对应的软件有M个模块,每个模块的编译时间为TM,并且所有可执行子文件合成的时间为TL,则按照现有技术中的单主机编译服务器的编译方法,代码的编译总时间TT应该为:TT=(TM1+TM2+......)+TL。而按照本申请实施例提供的方法,由于每个编译分机均是单独工作的,即所有编译分机可以并行进行编译,这样代码的编译总时间TT应该为:TT=MAX(TM1,TM2,......)+TL,即所有编译子请求所对应代码的编译时间中的最长时间与合成时间之和。由此可见,与现有技术相比,本申请实施例提供的该方法大大节省了编译时间,提高了编译速度,进而可以缩短软件的开发周期,降低软件的开发成本。
此外,在该编译系统中,编译主机主要负责调度工作,其作为整个系统的核心,只执行简单的命名,而不进行复杂的数据处理,即编译主机不执行实际的编译工作或链接工作,所以可以保证编译主机的性能,即可以保证编译主机的稳定性。编译分机只进行编译或链接工作,只在系统内可见,而不对外服务,这样可以保证编译信息和代码的安全性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种代码编译方法的流程示意图;
图2为本申请实施例提供的另一种代码编译方法的流程示意图;
图3为本申请实施例提供的一种代码编译主机的结构示意图;
图4为本申请实施例提供的代码分解单元的结构示意图;
图5为本申请实施例提供的编译控制单元的结构示意图;
图6为本申请实施例提供的一种代码编译系统的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
目前在软件的开发过程中,通常需要对软件代码进行不断的测试、修改,对于一些大型的软件,由于其源代码较多,在编译测试的过程中,会消耗较多的开发时间,降低了整个软件的开发效率,延长了软件的开发周期,并且增加了软件的开发成本。
为此本申请实施例提供一种代码编译方法、主机及系统,该方法首先将待编译代码分解成多个模块代码,然后控制多个编译分机分别对多个模块代码进行编译,在所有模块代码编译完成后,再汇总到一个编译分机上进行链接,得到该待编译代码的可执行文件。在编译过程中,将待编译代码分解后,采用分布式编译方式对多个模块代码分别进行编译,由于多个编译分机独立工作,使得多个模块代码的编译工作可以并行进行,即待编译代码的编译时间将等于耗时最长的模块代码的编译时间与链接时间之和,而模块代码作为待编译代码的一部分,其编译时间大大小于待编译代码的编译时间。因此本申请实施例提供的代码编译方法提高代码的编译速度,减少编译消耗时间。
以上是本申请的核心思想,为了使本技术领域的人员更好地理解本申请方案,下面结合附图对本申请作进一步的详细说明。
本申请实施例提供了一种代码编译方法。
一个实施例:
图1为本申请实施例提供的一种代码编译方法的流程示意图。如图1所所示,该方法包括:
步骤S101:将待编译代码分解成多个模块代码。
在本申请实施例中,在分解时,按照待编译代码所对应的软件的功能模块进行分解,即假设待编译代码所对应的软件有M个模块,则将待编译代码分解成M个模块代码。将代码分解成多个模块代码,在后续步骤中,可以对每个模块代码分别进行编译,这样就将对代码的编译过程化解成对多个模块代码进行编译的过程。另外,在其他实施例中,还可以按照其它方式对待编译代码进行分解。
步骤S102:指示多个编译分机中每一个编译分机分别获取一个模块代码并编译成可执行子文件。
多个编译分机均可以独立工作,所以对分解后得到的多个模块代码可以同时进行编译。
步骤S103:当待编译代码中所有模块代码均编译成可执行文件后,从所述多个编译分机中选取一个编译分机,控制该编译分机将与待编译代码中所有模块代码相对应的可执行子文件链接成可执行文件。
在步骤S102中,待编译代码中每个模块代码均被编译后,对待编译代码的整体的编译过程并未结束,还需要将多个编译分机得到的可执行子文件进行链接,链接后得到可执行文件才是待编译代码的最终编译结果。
在上一个实施例中,对待编译代码进行分解时,可以直接将待编译代码本身进行分解得到多个模块代码。而在实际运行过程中,由于代码的数据量较大,对代码本身进行数据处理将会占用较多的时间。为此,在本申请另外一个实施例中,在对待编译代码进行分解时,不对待编译代码本身进行分解,而是将待编译代码的编译请求分解成多个编译子请求,每一个编译子请求对应一个模块代码,这样当需要对模块代码进行编译时,可以依据编译子请求获取相对应的模块代码,同样可以完成对待编译代码的分解,并且可以避免了对代码本身进行数据处理耗时较多的问题。
又一个实施例:
在软件开发过程中,当测试人员测试软件时发现问题后,然后测试人员向开发人员报告软件存在问题,并且将该问题的现象及重新步骤描述清楚,之后开发人员根据重新步骤跟踪调试软件的源代码,并修改代码并修正问题最后将代码提交到代码服务器中,并通知测试人员问题已修改。
当测试人员接到开发人员的通知后,向编译主机提出编译请求,请求对开发人员提交的新代码进行编译。
图2为本申请实施例提供的另一种代码编译方法的流程示意图。如图2所示,该方法包括:
步骤S201:接收用户输入的多个编译请求并依次存储。
当测试人员需要编译时,在编译主机中输入编译请求,编译请求中携带有待编译代码的信息。
在现有技术中,采用单主机编译服务器在对软件进行编译时,不同的测试人员可能同时提出相同配置的编译请求,如果对接收到的用户的多个编译请求直接进行操作,则在编译脚本时,单主机编译服务器会由于同时读取或写入相同的文件,而出现冲突,导致编译失败。
在本申请实施例中,接收到用户输入多个编译请求后,并不立即执行编译,而是将多个编译请求依次存储到数据库中,即将多个编译请求形成一个队列,从而可以允许不同的测试人员同时提交相同配置的编译请求,而不会出现冲突的问题。
多个编译请求可以存储到独立的数据库中,并且在存储时将多个编译请求的状态均修改为“未编译”,方便在后续过程中查找。
步骤S202:查询所有编译请求的状态,并获取状态为未编译的编译请求。
从步骤201所存储的数据库中查询所有编译请求的状态,在对编译请求编译前,通过对编译请求的状态进行查询,可以得知数据库中是否还有用户输入的且未编译的编译请求。
步骤S203:按照与待编译代码相对应软件的功能模块将所述未编译的编译请求分解成多个编译子请求并存储。
在分解完成后,还可以将分解后的编译请求的状态修改为“已分解”,并将分解得到的多个编译子请求的状态修改为“未编译”,修改后的状态均存储在数据库中。
步骤S204:查询编译子请求的状态,并获取状态为未编译的编译子请求的标识。
通过对编译子请求状态的查询,可以得知数据库中是否还有未编译的编译子请求,并将为未编译的编译子请求标识找出,以便指示编译分机对未编译的编译子请求进行编译。
步骤S205:将获取的所述编译子请求的标识分别发送给多个编译分机中的每一个编译分机。
在本申请实施例中,编译请求及编译子请求均存储在数据库中,所以在对未编译的编译子请求进行分配时,可以选择将编译子请求的标识分配给编译分机即可。标识可以为与编译子请求相对应的一个编号,也可以为其它与编译请求相关的信息。
步骤206:指示每一个编译分机依据获取与其分配的编译子请求的标识相对应的编译子请求。
编译分机获取到编译子请求标识后,需要从数据库中查找到预存储的与编译子请求标识相对应的编译子请求。
步骤S207:控制每个编译分机下载与其获取的编译子请求相对应的模块代码并编译成可执行子文件。
得到可执行子文件即完成了对模块代码的编译过程。
在本申请实施例中,在得到可执行子文件后,还可以将编译子请求的状态修改为“编译成功”,并且将对应编译分机的状态修改为“空闲”。
另外,得到可执行子文件后,还可以将可执行子文件压缩打包后存储到数据库中,并且将可执行子文件压缩包的存储地址作为编译子请求的属性存储到数据库中,方便后续过程中对可执行子文件的调用。
步骤S208:查询编译子请求的状态,并获取所有编译子请求均编译成功的编译请求的标识;
由于编译请求中的所有编译子请求均编译完成后,才可以对其中的所有编译子请求进行链接。所以当对某一个编译请求进行链接时,需要首先对当前编译的编译请求中所有的编译子请求的状态进行查询,判断当前编译的编译请求是否编译成功。
步骤S209:从多个编译分机中选取一个空闲状态的编译分机,并将获取的所述编译请求的标识发送给该编译分机;
当编译请求中所有编译子任务均编译成功后,选择一个空闲状态的编译分机,并由该编译分机来进行链接。
步骤S210:控制该编译分机下载与获取的所述编译请求标识中所有编译子请求相对应的多个可执行子文件并链接成可执行文件并存储;
编译分机接收到所有编译子请求均编译成功的编译请求时,通过查询数据库中所有编译子请求的属性,可以获取到所有编译子请求所对应的可执行子文件压缩包的存储地址,从数据库中下载可执行子文件的压缩包。
步骤S211:指示该编译分机将多个可执行子文件合成可执行文件并存储到数据库中。
将步骤S210中下载的可执行子文件的压缩包解压后得到可执行子文件进行重组,即可链接成可执行文件。并且当得到可执行文件后,还可以将编译请求的状态修改为“链接成功”。
此外,在得到可执行文件后,如图2所示,该方法还可以包括:
步骤S212:向用户发送所述可执行文件的存储地址。
通过查询所有编译请求的状态,可以得知所有编译请求的编译情况,当查询到状态为“链接成功”的编译请求时,将该编译请求的可执行文件的存储地址向用户发送。发送的方式可以选择邮件或短信息等方式。
当将可执行文件的存储地址发送给用户,用户就可以根据该存储地址,下载可执行文件,并进行测试。
另外,在本申请其他实施例中,在对未编译的编译请求进行分解时,还可以生成一个链接任务并存储到数据库中,链接任务用于记录编译请求与多个编译子请求的对应关系。并且一个编译请求对应多个编译子请求,一个编译请求对应一个链接任务。这样当编译请求中的所有编译子请求均编译成功后,可以直接将链接任务发送给一个空闲状态的编译分机,编译分机根据链接任务中的对应关系,查找到与所有编译子请求相对应的可执行子文件并链接成可执行文件。
并且在上述实施例中,当需要对编译请求的状态及编译子请求的状态进行查询时,可以采用循环守护程序,即可以持续对编译请求的状态及编译子请求的状态进行查询。
本申请实施例提供的该方法,在对接收到代码的编译请求后,首先将该编译请求按照模块分解多个编译子请求,即将代码按照模块分解成多个模块,然后指示多个编译分机中每一个编译分机分别获取与一个编译子请求相对应的模块代码,并且将获取模块代码编译成可执行子文件,当编译请求中的所有编译子请求编译成功后,再指示一个编译分机将所有编译子请求编译得到的可执行子文件进行链接,得到与用户输入的编译请求相对应代码的可执行文件,完成编译过程,最后将编译结果向用户发送,编译结果为可执行文件的存储地址。
假设待编译代码所对应的软件有M个模块,每个模块的编译时间为TM,并且所有可执行子文件合成的时间为TL,则按照现有技术中的单主机编译服务器的编译方法,代码的编译总时间TT应该为:TT=(TM1+TM2+......)+TL。而按照本申请实施例提供的方法,由于每个编译分机均是单独工作的,即所有编译分机可以并行进行编译,这样代码的编译总时间TT应该为:TT=MAX(TM1,TM2,......)+TL,即所有编译子请求所对应代码的编译时间中的最长时间与合成时间之和。由此可见,与现有技术相比,本申请实施例提供的该方法大大节省了编译时间,提高了编译速度,进而可以缩短软件的开发周期,降低软件的开发成本。
本申请实施例还提供了一种代码编译主机,图3为本申请实施例提供的一种代码编译主机的结构示意图。如图3所示,该编译主机包括:代码分解单元1、编译控制单元2、编译成功确定单元3、编译分机选取单元4和链接控制单元5,其中:
代码分解单元1用于将待编译代码分解成多个模块代码。如图4所示,代码分解单元1包括:编译请求接收单元11、编译请求获取单元12和编译请求分解单元13,其中:所述编译请求接收单元11用于接收用户输入的多个编译请求并依次存储;编译请求获取单元12用于查询所有编译请求的状态,并获取状态为未编译的编译请求;编译请求分解单元13用于按照与待编译代码相对应软件的功能模块将所述未编译的编译请求分解成多个编译子请求并存储。
编译控制单元2用于生成编译指令并将所述编译指令发给每一编译分机。如图5所示,编译控制单元2包括:标识获取单元21、标识分配单元22和编译指令生成单元23,其中:标识获取单元21用于查询编译子请求的状态并获取状态为未编译的编译子请求的标识;标识分配单元22用于将所述未编译的编译子请求的标识分别发送给多个编译分机中的每一个编译分机;编译指令生成单元23用于生成编译指令并发送给每一个编译分机,指示每一个编译分机依据获取与其分配的编译子请求的标识相对应的编译子请求,控制每个编译分机下载与其获取的编译子请求相对应的模块代码并编译成可执行子文件。
编译成功确定单元3用于判断所述待编译代码中所有模块代码是否均编译成功;
编译分机选取单元4用于从所述多个编译分机中选取一个编译分机;
链接控制单元5用于当所有模块代码均编译成功时,生成控制所选取的编译分机将与所有模块代码相对应的可执行子文件并链接成可执行文件的链接指令,且将所述链接指令发送给所选取的编译分机。
另外,在其他实施例中,如图3所示,该编译主机还可以包括输出单元6,用于当编译得到可执行文件后,向用户发送可执行文件的存储地址。
本申请实施例还提供了一种代码编译系统,图6为本申请实施例提供的一种代码编译系统的结构示意图。如图6所示,该编译系统包括:代码服务器71、编译主机72和多个编译分机73,其中:编译主机72分别与多个编译分机73相连接,多个编译分机73均与代码服务器相连接。
代码服务器71用于存储并提供代码,在代码服务器71中存储有不同版本的代码可以供编译分机进行获取。编译主机72用于接收编译请求并分解,生成控制指令并发送给一个或多个编译分机73,控制指令包括:编译指令和链接指令,编译主机72的结构在上述实施例中已经详细描述,在此不再赘述。编译分机73用于接收编译主机71发送的编译指令或链接指令,并执行编译或链接。
图6中74为研发部门终端,75为测试部门终端,研发部分人员通过研发部分终端74将修改后的代码提交到代码服务器71中,测试人员通过测试部门终端75向编译主机72请求进行代码编译。
另外,在本申请其他实施例中,该系统还可以包括:数据库76,并且数据库76可以与编译主机72和多个编译分机73相连接,用于存储编译主机72接收的编译请求及分解得到的编译子请求,还可以存储编译分机73编译得到的可执行子文件及链接得到的可执行文件。
本申请实施例提供的该编译系统,编译主机主要负责调度工作,其作为整个系统的核心,只执行简单的命名,而不进行复杂的数据处理,即编译主机不执行实际的编译工作或链接工作,所以可以保证编译主机的性能,即可以保证编译主机的稳定性。编译分机只进行编译或链接工作,只在系统内可见,而不对外服务,这样可以保证编译信息和代码的安全性。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
以上所述仅是本申请的优选实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (11)
1.一种代码编译方法,其特征在于,包括:
接收用户输入的多个编译请求并依次存储,所述编译请求中携带有待编译代码的信息;
查询所有编译请求的状态,获取状态为未编译的编译请求;
按照与待编译代码相对应软件的功能模块将所述未编译的编译请求分解成多个编译子请求并存储,每个编译子请求对应一个模块代码;
指示多个编译分机中的每一个编译分机分别获取一个模块代码并编译成可执行子文件;
当所述待编译代码所对应的所有模块代码均编译成可执行子文件后,从所述多个编译分机中选取一个编译分机,并控制该编译分机将与所有模块代码相对应的可执行子文件链接成可执行文件。
2.根据权利要求1所述的方法,其特征在于,链接成可执行文件之后,进一步包括:
向用户发送所述可执行文件的存储地址。
3.根据权利要求1所述的方法,其特征在于,指示多个编译分机中的每一个编译分机分别获取一个模块代码并编译成可执行子文件,包括:
查询编译子请求的状态,并获取状态为未编译的编译子请求的标识;
将获取的所述编译子请求的标识分别发送给多个编译分机中的每一个编译分机;
指示每一个编译分机依据获取与其分配的编译子请求的标识相对应的编译子请求;
控制每个编译分机下载与其获取的编译子请求相对应的模块代码并编译成可执行子文件。
4.根据权利要求3所述的方法,其特征在于,从所述多个编译分机中选取一个编译分机,并控制该编译分机将与所有模块代码相对应的可执行子文件链接成可执行文件,包括:
获取从多个编译分机中选取一个空闲状态的编译分机;
获取编译请求中所有编译子请求均编译成功的编译请求的标识,并将获取的编译请求的标识发送给该编译分机;
控制该编译分机下载与获取的编译请求标识中所有编译子请求相对应的多个可执行子文件并链接成可执行文件并存储。
5.一种代码编译主机,其特征在于,包括:
代码分解单元,用于接收用户输入的多个编译请求并依次存储,所述编译请求中携带有待编译代码的信息;查询所有编译请求的状态,获取状态为未编译的编译请求;按照与待编译代码相对应软件的功能模块将所述未编译的编译请求分解成多个编译子请求并存储,每个编译子请求对应一个模块代码;
编译控制单元,用于生成指示多个编译分机中的每一个编译分机分别获取一个模块代码并编译成可执行子文件的编译指令,且将所述编译指令发给每一编译分机;
编译成功确定单元,用于判断所述待编译代码中所有模块代码是否均编译成可执行子文件;
编译分机选取单元,用于从所述多个编译分机中选取一个编译分机;
链接控制单元,用于当所述待编译代码中所有模块代码均编译成可执行子文件后,生成控制所选取的编译分机将与所有模块代码相对应的可执行子文件并链接成可执行文件的链接指令,且将所述链接指令发送给所选取的编译分机。
6.根据权利要求5所述的编译主机,其特征在于,还包括:
输出单元,用于向用户发送可执行文件的存储地址。
7.根据权利要求6所述的编译主机,其特征在于,所述编译控制单元包括:
标识获取单元,用于查询编译子请求的状态并获取状态为未编译的编译子请求的标识;
标识分配单元,用于将所述未编译的编译子请求的标识分别发送给多个编译分机中的每一个编译分机;
编译指令生成单元,用于生成编译指令并发送给每一个编译分机,指示每一个编译分机依据获取与其分配的编译子请求的标识相对应的编译子请求,控制每个编译分机下载与其获取的编译子请求相对应的模块代码并编译成可执行子文件。
8.一种代码编译系统,其特征在于,包括:代码服务器、编译主机和多个编译分机,其中:
所述代码服务器用于存储并提供不同版本的代码;
所述编译主机用于接收用户输入的多个编译请求并依次存储,所述编译请求中携带有待编译代码的信息;查询所有编译请求的状态,获取状态为未编译的编译请求;按照与待编译代码相对应软件的功能模块将所述未编译的编译请求分解成多个编译子请求并存储,每个编译子请求对应一个模块代码;
指示多个编译分机中的每一个编译分机分别获取一个模块代码并编译成可执行子文件;并当所述待编译代码所对应的所有模块代码均编译成可执行子文件后,从所述多个编译分机中选取一个编译分机,控制该编译分机将与所有模块代码相对应的可执行子文件链接成可执行文件;
所述编译分机用于受所述编译主机控制执行编译或链接。
9.根据权利要求8所述的系统,其特征在于,所述编译主机包括:
代码分解单元,用于将待编译代码分解成多个模块代码;
编译控制单元,用于生成指示多个编译分机中的每一个编译分机分别获取一个模块代码并编译成可执行子文件的编译指令,且将所述编译指令发给每一编译分机;
编译成功确定单元,用于判断所述待编译代码中所有模块代码是否均编译成功;
编译分机选取单元,用于从所述多个编译分机中选取一个编译分机;
链接控制单元,用于当所有模块代码均编译成功时,生成控制所选取的编译分机将与所有模块代码相对应的可执行子文件并链接成可执行文件的链接指令,且将所述链接指令发送给所选取的编译分机。
10.根据权利要求8所述的编译系统,其特征在于,所述编译主机还包括:
输出单元,用于向用户发送可执行文件的存储地址。
11.根据权利要求9所述的系统,其特征在于,还包括:
数据库,用于存储编译请求、编译子请求、可执行子文件或可执行文件。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110149093.0A CN102193812B (zh) | 2011-06-03 | 2011-06-03 | 一种代码编译方法、主机及系统 |
HK12101128.9A HK1160945A1 (zh) | 2011-06-03 | 2012-02-07 | 種代碼編譯方法、主機及系統 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110149093.0A CN102193812B (zh) | 2011-06-03 | 2011-06-03 | 一种代码编译方法、主机及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102193812A CN102193812A (zh) | 2011-09-21 |
CN102193812B true CN102193812B (zh) | 2014-03-26 |
Family
ID=44601926
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110149093.0A Active CN102193812B (zh) | 2011-06-03 | 2011-06-03 | 一种代码编译方法、主机及系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN102193812B (zh) |
HK (1) | HK1160945A1 (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105335284B (zh) * | 2014-08-07 | 2018-12-28 | 腾讯科技(深圳)有限公司 | 一种用于持续集成系统的数据处理方法及装置 |
CN106293683B (zh) * | 2015-06-12 | 2020-06-19 | 小米科技有限责任公司 | 一种项目的编译方法及装置 |
CN105138387A (zh) * | 2015-08-31 | 2015-12-09 | 惠州Tcl移动通信有限公司 | 一种软件的编译方法、装置及系统 |
CN105468428B (zh) * | 2015-12-04 | 2018-07-06 | 上海斐讯数据通信技术有限公司 | 一种安卓源代码编译方法及系统 |
CN105760207A (zh) * | 2016-03-14 | 2016-07-13 | 青岛海信移动通信技术股份有限公司 | 一种基于云计算平台的编译方法、装置及系统 |
CN105867993A (zh) * | 2016-03-29 | 2016-08-17 | 乐视控股(北京)有限公司 | 一种软件产品编译方法及设备 |
CN106547548B (zh) * | 2016-10-19 | 2020-06-30 | 海信视像科技股份有限公司 | 一种软件版本的编译方法和装置 |
CN108614768A (zh) * | 2016-12-14 | 2018-10-02 | 北京国双科技有限公司 | 一种分布式持续集成方法及装置 |
CN106980504B (zh) * | 2017-03-28 | 2022-07-01 | 腾讯科技(深圳)有限公司 | 一种应用程序开发方法及其工具、设备 |
CN107168749B (zh) * | 2017-05-31 | 2022-11-29 | 腾讯科技(深圳)有限公司 | 一种编译方法、装置、设备和计算机可读存储介质 |
CN109799993A (zh) * | 2018-12-14 | 2019-05-24 | 深圳壹账通智能科技有限公司 | 代码编译方法、编译设备、存储介质及装置 |
CN113127002B (zh) * | 2021-04-28 | 2024-03-29 | 上海米哈游璃月科技有限公司 | 一种代码编译过程监控方法、装置、设备和介质 |
CN117130622B (zh) * | 2023-10-26 | 2024-01-12 | 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) | 一种分布式在线代码编译运行方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1366737A (zh) * | 2000-04-26 | 2002-08-28 | 松下电器产业株式会社 | 编码/解码装置及编码/解码方法 |
CN101140525A (zh) * | 2007-10-17 | 2008-03-12 | 中兴通讯股份有限公司 | 分布式编译方法 |
CN101563673A (zh) * | 2006-12-14 | 2009-10-21 | 富士通株式会社 | 编译方法以及编译器 |
CN101937356A (zh) * | 2010-09-15 | 2011-01-05 | 青岛海信移动通信技术股份有限公司 | 一种编译WebKit浏览器的方法及装置 |
-
2011
- 2011-06-03 CN CN201110149093.0A patent/CN102193812B/zh active Active
-
2012
- 2012-02-07 HK HK12101128.9A patent/HK1160945A1/zh unknown
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1366737A (zh) * | 2000-04-26 | 2002-08-28 | 松下电器产业株式会社 | 编码/解码装置及编码/解码方法 |
CN101563673A (zh) * | 2006-12-14 | 2009-10-21 | 富士通株式会社 | 编译方法以及编译器 |
CN101140525A (zh) * | 2007-10-17 | 2008-03-12 | 中兴通讯股份有限公司 | 分布式编译方法 |
CN101937356A (zh) * | 2010-09-15 | 2011-01-05 | 青岛海信移动通信技术股份有限公司 | 一种编译WebKit浏览器的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102193812A (zh) | 2011-09-21 |
HK1160945A1 (zh) | 2012-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102193812B (zh) | 一种代码编译方法、主机及系统 | |
JP7044808B2 (ja) | データ処理方法および関連製品 | |
CN109992407B (zh) | 一种yarn集群gpu资源调度方法、装置和介质 | |
CN101290581B (zh) | 编译系统及方法 | |
CN107678752B (zh) | 一种面向异构集群的任务处理方法及装置 | |
CN111625316A (zh) | 一种环境部署方法、装置及电子设备和存储介质 | |
CN108829378A (zh) | 一种应用软件的开发方法、装置及电子设备 | |
US20230153158A1 (en) | Method, apparatus, system, and storage medium for performing eda task | |
CN110598855A (zh) | 深度学习模型生成方法、装置、设备及存储介质 | |
CN112114816B (zh) | 一种分布式编译系统和方法 | |
CN104166570B (zh) | 一种在线更新文件的方法、设备及系统 | |
CN102929646A (zh) | 应用程序生成方法及装置 | |
CN115860143A (zh) | 算子模型生成方法、装置和设备 | |
CN112631903A (zh) | 任务测试方法、装置、电子设备及存储介质 | |
CN112905461A (zh) | 自动化接口测试案例执行方法及装置 | |
CN113127019A (zh) | 验证方法及相关设备 | |
CN105373384A (zh) | 一种软件开发方法和装置 | |
CN112445607B (zh) | 一种应用程序执行方法函数的方法及装置 | |
CN115525561A (zh) | 协议接口测试方法、装置、终端设备以及存储介质 | |
CN114020262A (zh) | 一种继电保护装置功能模块的调度方法及系统 | |
CN113176993A (zh) | 用例测试方法、装置、电子设备及存储介质 | |
CN114721952A (zh) | 多套测试环境同步部署方法、装置、设备及存储介质 | |
CN114020414A (zh) | Android系统与底层Linux共生方法、装置、电子设备及存储介质 | |
CN113626035A (zh) | 基于tvm面向risc-v设备的神经网络编译方法 | |
CN106570143B (zh) | 一种发送响应对象的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1160945 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: GR Ref document number: 1160945 Country of ref document: HK |