一种编译方法及装置
文献发布时间:2023-06-19 11:11:32
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种编译方法及装置。
背景技术
一个应用程序的开发流程一般包括开发、编译、测试和上线几个步骤。编译是利用编译程序把原始代码转化成可执行的目标代码的过程。对于静态编程语言,编译一般指把原始代码转化成机器码。对于动态编程语言,编译一般指代码打包、代码混淆之类的预处理工作。编译是软件开发必不可少的一环。
在线集成开发环境(Web integrity develop environment,WebIDE)是一种针对编程开发人员的网络应用程序,能够实现断点调试、版本管理,团队开发等功能。WebIDE中的一个项目可能会被多名开发工程师同时进行开发和编译,但编译需要在代码项目的文件夹下进行,在编译的过程中代码项目可能被其他工程师修改或编译,导致编译得到的编译产物不符合预期。
发明内容
本公开实施例至少提供一种编译方法及装置。
第一方面,本公开实施例提供了一种编译方法,包括:
响应客户端发送的代码编译请求,确定所述代码编译请求对应的目标代码;其中,所述目标代码支持同时被多个客户端共同开发;
生成所述目标代码专用的隔离文件夹,并将所述目标代码存储至所述隔离文件夹中;
对所述隔离文件夹中的目标代码进行编译,得到所述目标代码的编译产物。
一种可选的实施方式中,确定所述代码编译请求对应的目标代码,包括:
基于所述代码编译请求携带的代码标识,确定所述目标代码。
一种可选的实施方式中,所述建立所述目标代码专用的隔离文件夹,包括:
基于所述代码编译请求携带的代码标识以及所述代码编译请求对应对应的用户标识,生成具有唯一名称的隔离文件夹;所述唯一名称用于区分针对所述目标代码的多次编译操作。
一种可选的实施方式中,对所述隔离文件夹中的目标代码进行编译,得到所述目标代码的编译产物,包括:
将预设的编译工具存储在所述隔离文件夹中;
利用所述编译工具,对所述隔离文件夹中的目标代码进行编译,得到所述目标代码的编译产物。
一种可选的实施方式中,其特征在于,所述方法还包括:
在对所述目标代码进行编译的过程中,以预设周期获取所述目标代码对应的编译日志,并将所述编译日志存储至日志数据库中;
响应所述客户端针对所述隔离文件夹下的目标代码的编译状态查询指令,基于所述日志数据库中与所述隔离文件夹对应的所述编译日志,确定所述隔离文件夹下的所述目标代码的编译状态,并将所述编译状态发送至所述客户端。
一种可选的实施方式中,所述方法还包括:
响应所述客户端针对所述目标代码的编译日志查询操作,将所述日志数据库中与所述编译日志查询操作对应的编译日志发送至所述客户端。
一种可选的实施方式中,在得到所述目标代码的编译产物之后,所述方法还包括:
将生成在所述隔离文件夹下的所述目标编译产物存储至产物数据库中,并将所述隔离文件夹以及所述隔离文件夹下的文件删除。
一种可选的实施方式中,所述客户端为在线集成开发环境webIDE客户端。
第二方面,本公开实施例还提供一种编译装置,包括:
确定模块,用于响应客户端发送的代码编译请求,确定所述代码编译请求对应的目标代码;其中,所述目标代码支持同时被多个客户端共同开发;
存储模块,用于生成所述目标代码专用的隔离文件夹,并将所述目标代码存储至所述隔离文件夹中;
编译模块,用于对所述隔离文件夹中的目标代码进行编译,得到所述目标代码的编译产物。
一种可选的实施方式中,所述确定模块具体用于:
基于所述代码编译请求携带的代码标识,确定所述目标代码。
一种可选的实施方式中,存储模块在建立所述目标代码专用的隔离文件夹时,具体用于:
基于所述代码编译请求携带的代码标识以及所述代码编译请求对应对应的用户标识,生成具有唯一名称的隔离文件夹;所述唯一名称用于区分针对所述目标代码的多次编译操作。
一种可选的实施方式中,所述编译模块具体用于:
将预设的编译工具存储在所述隔离文件夹中;
利用所述编译工具,对所述隔离文件夹中的目标代码进行编译,得到所述目标代码的编译产物。
一种可选的实施方式中,所述装置还包括编译查询模块,用于:
在对所述目标代码进行编译的过程中,以预设周期获取所述目标代码对应的编译日志,并将所述编译日志存储至日志数据库中;
响应所述客户端针对所述隔离文件夹下的目标代码的编译状态查询指令,基于所述日志数据库中与所述隔离文件夹对应的所述编译日志,确定所述隔离文件夹下的所述目标代码的编译状态,并将所述编译状态发送至所述客户端。
一种可选的实施方式中,所述编译查询模块还用于:
响应所述客户端针对所述目标代码的编译日志查询操作,将所述日志数据库中与所述编译日志查询操作对应的编译日志发送至所述客户端。
一种可选的实施方式中,所述装置还包括删除模块,用于:
将生成在所述隔离文件夹下的所述目标编译产物存储至产物数据库中,并将所述隔离文件夹以及所述隔离文件夹下的文件删除。
一种可选的实施方式中,所述客户端为在线集成开发环境webIDE客户端。
第三方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
关于上述编译装置、计算机设备、及计算机可读存储介质的效果描述参见上述编译方法的说明,这里不再赘述。
本公开实施例提供的编译方法及装置,通过响应客户端发送的代码编译请求,确定所述代码编译请求对应的目标代码;其中,所述目标代码支持同时被多个客户端共同开发;生成所述目标代码专用的隔离文件夹,并将所述目标代码存储至所述隔离文件夹中;对所述隔离文件夹中的目标代码进行编译,得到所述目标代码的编译产物。本公开实施例提供的编译方法能够生成目标代码专用的隔离文件夹,并在隔离文件夹中对目标代码进行编译,使同一代码项目在同一时间的不同编译相互独立,不会相互影响和覆盖。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种编译方法的流程图;
图2示出了本公开实施例所提供的一种编译装置的示意图;
图3示出了本公开实施例所提供的一种计算机设备的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
经研究发现,在本地集成开发环境进行软件开发时,一般在软件工程所在的目录下进行编译。编译器读取当前文件夹下的代码文件,然后进行编译,编译成功后把编译产物输出到当前文件夹。执行当前文件夹的编译产物即可运行应用程序。WebIDE是一个提供开发环境的网络应用程序。通过WebIDE,软件开发工程师在浏览器上就可以进行软件开发。WebIDE一般会根据使用场景进行定制化,比如定制化为小程序IDE。定制化的WebIDE一般把代码文件存储在数据库中。WebIDE一般面向大范围的软件开发工程师。WebIDE中的一个代码项目可能会被多名工程师同时进行开发和编译。由于在线集成开发环境同样需要在代码文件当前文件夹下进行编译,在编译的过程中代码项目可能被其他工程师修改或编译,导致编译得到的编译产物不符合预期,使编译中的代码项目相互影响和覆盖。
基于上述研究,本公开提供了一种编译方法及装置,能够生成目标代码专用的隔离文件夹,并在隔离文件夹中对目标代码进行编译,使同一代码项目在同一时间的不同编译相互独立,不会相互影响和覆盖。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种编译方法进行详细介绍,本公开实施例所提供的编译方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备。
参见图1所示,为本公开实施例提供的编译方法的流程图,所述方法包括步骤S101~S103,其中:
S101:响应客户端发送的代码编译请求,确定所述代码编译请求对应的目标代码;其中,所述目标代码支持同时被多个客户端共同开发。
该步骤中,用户可以通过客户端,向服务器发送当前正在开发的目标代码的代码编译请求,目标代码可以同时被多个客户端共同开发,对其进行代码的增添、删除、修改等操作。
其中,客户端为在线集成开发环境webIDE客户端。
其中,代码编译请求中可以包含目标代码的代码标识,目标代码可以为在提交代码编译请求的时刻时,开发的代码项目对应的代码。
一种可能的实施方式中,确定所述代码编译请求对应的目标代码,可以包括:
基于所述代码编译请求携带的代码标识,确定所述目标代码。
示例性的,在用户提交代码编译请求时,服务器可以将当前正在开发的代码保存,并为保存的代码分配代码标识,代码编译请求可以携带有用户标识以及代码标识,服务器可以通过代码编译请求携带的代码标识确定目标代码。
S102:生成所述目标代码专用的隔离文件夹,并将所述目标代码存储至所述隔离文件夹中。
该步骤中,可以为目标代码生成专用的隔离文件夹,以防止其他用户对目标代码进行修改或编译时,对当前进行编译的用户造成影响。
一种可能的实施方式中,所述建立所述目标代码专用的隔离文件夹,包括:
基于所述代码编译请求携带的代码标识以及所述代码编译请求对应对应的用户标识,生成具有唯一名称的隔离文件夹;所述唯一名称用于区分针对所述目标代码的多次编译操作。
示例性的,可以根据代码标识、用户标识以及代码编译请求携带的时间戳来构建隔离文件夹,由于代码标识、用户标识以及代码编译请求携带的时间戳都具有唯一性,生成的隔离文件夹也是唯一的。示例性的,可以隔离文件夹的形式可以为“/tmp/
在建立目标代码专用的隔离文件夹后,可以将目标代码复制进隔离文件夹,并在隔离文件夹中进行编译。
S103:对所述隔离文件夹中的目标代码进行编译,得到所述目标代码的编译产物,并将所述编译产物存储在数据库中。
该步骤中,通过对隔离文件夹中的目标代码进行编译,可以使编译过程不受其他用户的修改或编译操作影响。
一种可能的实施方式中,对所述隔离文件夹中的目标代码进行编译,得到所述目标代码的编译产物,包括:
将预设的编译工具存储在所述隔离文件夹中;
利用所述编译工具,对所述隔离文件夹中的目标代码进行编译,得到所述目标代码的编译产物。
该步骤中,若要对目标代码进行编译,需要将目标代码与编译工具存储至同一文件夹下。编译工具可以是编译器,可以利用shell脚本,将编译工具存储至隔离文件夹中,还可以对编译工具的参数进行配置,编译参数可以包括编译日志的输出文件夹、编译产物的输出文件夹等。编译工具的参数可以是预先配置好的,也可以是将其存储至隔离文件夹后进行配置的。
由于编译的过程通常耗时较长,用户可能存在查看编译状态的需求,因此,在一些可能的实施方式中,所述方法还包括:
在对所述目标代码进行编译的过程中,以预设周期获取所述目标代码对应的编译日志,并将所述编译日志存储至日志数据库中;
响应所述客户端针对所述隔离文件夹下的目标代码的编译状态查询指令,基于所述日志数据库中与所述隔离文件夹对应的所述编译日志,确定所述隔离文件夹下的所述目标代码的编译状态,并将所述编译状态发送至所述客户端。
该步骤中,可以在目标代码开始编译后,以预设周期从编译工具中获取目标代码对应的编译日志,并将编译日志存储至日志数据库中,当检测到客户端针对目标代码的编译状态查询指令后,可以根据编译日志确定目标代码的编译状态,然后将编译状态发送至客户端。
进一步的,该方法还可以包括:
响应所述客户端针对所述目标代码的编译日志查询操作,将所述日志数据库中与所述编译日志查询操作对应的编译日志发送至所述客户端。
这样,在检测到编译日志查询操作后,可以将最新存储的编译日志发送至客户端,以使用户通过客户端查看编译日志,掌握编译的进度。
其中,编译状态可以包括“编译中”、“编译成功”、“编译失败”等。
一种可能的实施方式中,在得到所述目标代码的编译产物之后,所述方法还包括:
将生成在所述隔离文件夹下的所述目标编译产物存储至产物数据库中,并将所述隔离文件夹以及所述隔离文件夹下的文件删除。
该步骤中,在编译完成后,由于已经得到编译产物,隔离文件夹以及隔离文件夹中的文件已经不再被需求,可以将隔离文件夹以及隔离文件夹下的文件存储至产物数据库中,并将隔离文件夹以及隔离文件夹下的文件删除,以释放存储空间。
本公开实施例提供的编译方法,通过响应客户端发送的代码编译请求,确定所述代码编译请求对应的目标代码;其中,所述目标代码支持同时被多个客户端共同开发;生成所述目标代码专用的隔离文件夹,并将所述目标代码存储至所述隔离文件夹中;对所述隔离文件夹中的目标代码进行编译,得到所述目标代码的编译产物。本公开实施例提供的编译方法能够生成目标代码专用的隔离文件夹,并在隔离文件夹中对目标代码进行编译,使同一代码项目在同一时间的不同编译相互独立,不会相互影响和覆盖。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与编译方法对应的编译装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述编译方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图2所示,为本公开实施例提供的一种编译装置的架构示意图,所述编译装置200包括:确定模块210、存储模块220、编译模块230;其中,
确定模块210,用于响应客户端发送的代码编译请求,确定所述代码编译请求对应的目标代码;其中,所述目标代码支持同时被多个客户端共同开发;
存储模块220,用于生成所述目标代码专用的隔离文件夹,并将所述目标代码存储至所述隔离文件夹中;
编译模块230,用于对所述隔离文件夹中的目标代码进行编译,得到所述目标代码的编译产物。
本公开实施例能够通过生成目标代码专用的隔离文件夹,并在隔离文件夹中对目标代码进行编译,使同一代码项目在同一时间的不同编译相互独立,不会相互影响和覆盖。
一种可选的实施方式中,所述确定模块210具体用于:
基于所述代码编译请求携带的代码标识,确定所述目标代码。
一种可选的实施方式中,存储模块220在建立所述目标代码专用的隔离文件夹时,具体用于:
基于所述代码编译请求携带的代码标识以及所述代码编译请求对应对应的用户标识,生成具有唯一名称的隔离文件夹;所述唯一名称用于区分针对所述目标代码的多次编译操作。
一种可选的实施方式中,所述编译模块230具体用于:
将预设的编译工具存储在所述隔离文件夹中;
利用所述编译工具,对所述隔离文件夹中的目标代码进行编译,得到所述目标代码的编译产物。
一种可选的实施方式中,所述编译装置200还包括编译查询模块240,用于:
在对所述目标代码进行编译的过程中,以预设周期获取所述目标代码对应的编译日志,并将所述编译日志存储至日志数据库中;
响应所述客户端针对所述隔离文件夹下的目标代码的编译状态查询指令,基于所述日志数据库中与所述隔离文件夹对应的所述编译日志,确定所述隔离文件夹下的所述目标代码的编译状态,并将所述编译状态发送至所述客户端。
一种可选的实施方式中,所述编译查询模块240还用于:
响应所述客户端针对所述目标代码的编译日志查询操作,将所述日志数据库中与所述编译日志查询操作对应的编译日志发送至所述客户端。
一种可选的实施方式中,所述编译装置200还包括删除模块250,用于:
将生成在所述隔离文件夹下的所述目标编译产物存储至产物数据库中,并将所述隔离文件夹以及所述隔离文件夹下的文件删除。
一种可选的实施方式中,所述客户端为在线集成开发环境webIDE客户端。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
基于同一技术构思,本公开实施例还提供了一种计算机设备。参照图3所示,为本公开实施例提供的计算机设备300的结构示意图,包括处理器301、存储器302、和总线303。其中,存储器302用于存储执行指令,包括内存3021和外部存储器3022;这里的内存3021也称内存储器,用于暂时存放处理器301中的运算数据,以及与硬盘等外部存储器3022交换的数据,处理器301通过内存3021与外部存储器3022进行数据交换,当计算机设备300运行时,处理器301与存储器302之间通过总线303通信,使得处理器301在执行以下指令:
响应客户端发送的代码编译请求,确定所述代码编译请求对应的目标代码;其中,所述目标代码支持同时被多个客户端共同开发;
生成所述目标代码专用的隔离文件夹,并将所述目标代码存储至所述隔离文件夹中;
对所述隔离文件夹中的目标代码进行编译,得到所述目标代码的编译产物。
一种可能的实施方式中,处理器301执行的指令中,确定所述代码编译请求对应的目标代码,包括:
基于所述代码编译请求携带的代码标识,确定所述目标代码。
一种可能的实施方式中,处理器301执行的指令中,所述建立所述目标代码专用的隔离文件夹,包括:
基于所述代码编译请求携带的代码标识以及所述代码编译请求对应对应的用户标识,生成具有唯一名称的隔离文件夹;所述唯一名称用于区分针对所述目标代码的多次编译操作。
一种可能的实施方式中,处理器301执行的指令中,对所述隔离文件夹中的目标代码进行编译,得到所述目标代码的编译产物,包括:
将预设的编译工具存储在所述隔离文件夹中;
利用所述编译工具,对所述隔离文件夹中的目标代码进行编译,得到所述目标代码的编译产物。
一种可能的实施方式中,处理器301还用于执行:
在对所述目标代码进行编译的过程中,以预设周期获取所述目标代码对应的编译日志,并将所述编译日志存储至日志数据库中;
响应所述客户端针对所述隔离文件夹下的目标代码的编译状态查询指令,基于所述日志数据库中与所述隔离文件夹对应的所述编译日志,确定所述隔离文件夹下的所述目标代码的编译状态,并将所述编译状态发送至所述客户端。
一种可选的实施方式中,处理器301还用于执行:
响应所述客户端针对所述目标代码的编译日志查询操作,将所述日志数据库中与所述编译日志查询操作对应的编译日志发送至所述客户端。
一种可能的实施方式中,在得到所述目标代码的编译产物之后,处理器301还用于执行:
将生成在所述隔离文件夹下的所述目标编译产物存储至产物数据库中,并将所述隔离文件夹以及所述隔离文件夹下的文件删除。
一种可能的实施方式中,处理器301执行的指令中,所述客户端为在线集成开发环境webIDE客户端。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的编译方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的编译的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。
- 一种编译程序、一种存储编译程序的计算机可读存储媒体、一种编译方法和编译单元
- 编译程序、编译程序装置和编译方法