构建方法及构建装置与流程

文档序号:31691268发布日期:2022-09-30 23:19阅读:34来源:国知局
1.本公开涉及一种构建方法及构建装置。
背景技术
::2.在软件开发项目中,需要对源代码进行构建(build),以生成可执行程序/库,并对生成的可执行程序/库进行测试。当发现错误或需要增加功能时,需要修改源代码并再次构建。因此记录源代码和构建生成的可执行程序/库之间的对应关系是非常重要的。通常,人们可以使用版本管理系统来管理源代码并为源代码自动分配版本号。常用的版本管理系统包括,例如git、cvs(concurrentversionssystem)、svn(subversion)等。3.当用户把源代码保存到版本管理系统后,版本管理系统会自动分配一个版本号给源代码。在保存到版本管理系统之前,用户并不知道版本管理系统将要分配的版本号是什么,所以源代码中并不会包含其自身的版本号。4.人们希望在根据源代码生成的可执行文件中包含源代码的版本号。一种常用的做法是,在对源代码进行构建之前,由用户手动更新版本号,然后进行构建等处理。例如,用户手动在源代码中显式更新版本号,在文件执行时可打印或通过其他调试方法输出当前版本号,同时后续在发布文档中将该版本号对应至版本管理系统自动分配的版本号。这种方式存在一些缺点,例如用户可能忘记手动输入版本号,或者用户可能输入错误的版本号。技术实现要素:5.根据本公开的第一方面,提供了一种构建方法,包括:获取包含源代码的源代码文件;获取所述源代码的版本号;根据所述版本号生成记录文件,其中所述记录文件中包含所述版本号;以及根据所述源代码文件和所述记录文件生成可执行文件,使得所述版本号包含在所述可执行文件中。6.在根据本公开的一些实施例中,获取所述源代码的版本号包括:根据所述源代码文件计算能标识所述源代码文件的识别码;以及根据所述识别码从版本控制系统获取所述源代码的版本号。7.在根据本公开的一些实施例中,所述识别码包括所述源代码文件的哈希值。8.在根据本公开的一些实施例中,所述哈希值包括md5值和sha-1值。9.在根据本公开的一些实施例中,所述识别码能唯一地标识所述源代码文件。10.在根据本公开的一些实施例中,所述源代码包含调用所述记录文件的代码。11.根据本公开的第二方面,提供了一种构建装置,包括:源代码获取模块,被配置为获取包含源代码的源代码文件;版本号获取模块,被配置为获取所述源代码的版本号;记录模块,被配置为根据所述版本号获取模块获取的所述版本号生成记录文件,其中所述记录文件中包含所述版本号;以及构建模块,根据所述源代码文件和所述记录文件生成可执行文件,使得所述版本号包含在所述可执行文件中。12.在根据本公开的一些实施例中,所述构建装置还包括:计算模块,被配置为根据所述源代码文件计算能标识所述源代码文件的识别码,其中,所述版本号获取模块根据所述识别码从版本控制系统获取所述源代码的版本号。13.在根据本公开的一些实施例中,所述识别码包括所述源代码文件的哈希值。14.在根据本公开的一些实施例中,所述哈希值包括md5值和sha-1值。15.在根据本公开的一些实施例中,所述识别码能唯一地标识所述源代码文件。16.在根据本公开的一些实施例中,所述源代码包含调用所述记录文件的代码。17.根据本公开的第三方面,提供了一种存储有指令的非临时计算机可读存储介质,当所述指令被处理器执行时,实现上述根据本公开的构建方法。18.根据本公开的第四方面,提供了一种计算机程序产品,包括指令,当所述指令被处理器执行时,实现上述根据本公开的构建方法。19.通过以下参照附图对本公开的示例性实施例的详细描述,本公开的其它特征及其优点将会变得清楚。附图说明20.构成说明书的一部分的附图描述了本公开的实施例,并且连同说明书一起用于解释本公开的原理。21.参照附图,根据下面的详细描述,可以更加清楚地理解本公开,其中:22.图1示出了根据本公开的实施例的一种对源代码进行构建的方法的流程图。23.图2示意性地示出了根据本公开的一些实施例的记录文件的内容。24.图3示出了根据本公开的实施例的构建装置的结构的示意图。25.图4示出了根据本公开的一些实施例的构建装置的示意图。26.图5示出根据本公开的一种示例性实施例的计算设备的框图。27.注意,在以下说明的实施方式中,有时在不同的附图之间共同使用同一附图标记来表示相同部分或具有相同功能的部分,而省略其重复说明。在本说明书中,使用相似的标号和字母表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。28.为了便于理解,在附图等中所示的各结构的位置、尺寸及范围等有时不表示实际的位置、尺寸及范围等。因此,所公开的发明并不限于附图等所公开的位置、尺寸及范围等。具体实施方式29.现在将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。30.以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。31.对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。32.在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。33.图1示出了根据本公开的实施例的一种对源代码进行构建的方法的流程图。如图1所示,该构建方法可以包括以下步骤:34.首先,获取源代码文件(步骤101)。源代码文件可以为一个或多个文件,这些文件通常以例如文本方式记录源代码。当需要对源代进行构建以生成可执行程序/库时,构建装置可以从版本控制系统或其它存储有源代码的装置读取源代码文件。35.本公开中描述的“构建”是指从源代码到可执行程序/库的过程,可以包括但不限于例如预编译、编译、汇编、链接等。构建装置可以包括构建过程中使用的各个装置,例如预编译器、编译器、汇编器、链接器、以及包括各种辅助工具的工具链等。36.然后,构建装置可以从版本控制系统获取源代码的版本号(步骤102)。在根据本公开的一个实施例中,构建装置可以在从版本控制系统读取源代码文件的同时,直接从版本控制系统获取源代码的版本号。37.此外,在根据本公开的一些实施例,构建装置可以从其它存储有源代码的存储装置获取源代码文件。在这种情况下,构建装置和存储装置可能都不知道该源代码文件的版本号。因此,构建装置需要从版本控制系统获取源代码文件的版本号。38.例如,构建装置可以根据源代码文件计算能标识源代码文件的识别码,并根据该识别码从版本控制系统获取版本号。当用户将源代码文件保存到版本控制系统中时,版本控制系统会根据上传的源代码文件,计算该源代码文件的识别码,并建立索引,以保存识别码和版本号之间的对应关系。这样,当版本控制系统接收到来自构建装置的获取版本号的请求时,版本控制系统可以根据请求中包含的识别码进行查找,从而确定版本号。然后,版本控制系统将版本号包含在响应消息中,发送给构建装置。39.这样,即使构建装置从版本控制系统以外的其它存储装置获取源代码文件,也能够获得源代码文件的版本号。40.此外,可以采用任何合适的方式来计算源代码文件的识别码。例如,可以使用哈希函数来计算源代码文件的哈希值。哈希函数也称为散列函数,散列函数可以把任意长度的输入(又叫做预映射)通过散列算法变换成固定长度的输出,该输出就是散列值(也称为哈希值)。常用的哈希值包括例如md5、sha-1等。41.接下来,构建装置可以根据获取的版本号生成记录文件(步骤103)。在记录文件中包含有获取的版本号。记录文件可以采用各种格式,例如,记录文件的格式可以为例如文本文件(文件名称后缀为.txt)、头文件(文件名称后缀为.h)。此外,取决于源代码文件使用的编程语言,记录文件的格式也可以为例如c++格式(文件名称后缀为.cpp)、c语言格式(文件名称后缀为.c)、java语言格式(文件名称后缀为.java),等等。42.图2示意性地示出了根据本公开的一些实施例的记录文件的内容。43.如图2所示,该记录文件采用了例如c++语言书写源代码。其中,定义了字符型的变量stable_app_head和stable_app_state。其中,stable_app_head的值为“ec09cbd73ef5896a7558f35b1fa7df4e8f83162c”,这就是版本控制系统为该版本的源代码分配的版本号。stable_app_state的值为“clean”,表示没有任何本地改动,进行构建的所有源文件内容与版本控制系统中该版本的所有源文件内容一致,避免了任何脱离版本控制系统管控的风险。该状态表示所有源文件皆在版本控制系统管控中。44.最后,构建装置可以根据源代码文件和记录文件生成可执行文件,即可执行程序/库(步骤104)。在编写源代码的过程中,预留了对于上述记录文件的调用。这样,构建装置在构建过程中,可以根据该调用自动地将记录文件中的版本号包含在最终生成的可执行文件中。45.图3示出了根据本公开的实施例的构建装置的结构的示意图。如图3所示,构建装置300包括源代码获取模块301、版本号获取模块302、记录模块303和构建模块304。46.其中,源代码获取模块301可以根据用户的指令,从版本控制系统或其它存储源代码的装置读取源代码文件。版本号获取模块302可以从版本控制系统获取源代码的版本号。例如,在源代码获取模块301从版本控制系统读取源代码文件的同时,版本号获取模块302可以直接从版本控制系统获取源代码的版本号。记录模块303可以根据版本号获取模块302获取的版本号,生成记录文件。如上所述,记录文件可以为各种格式,在记录文件中包含了源代码文件的版本号。构建模块304可以根据源代码获取模块301获取的源代码文件以及记录模块303生成的记录文件,执行构建处理,从而最终生成包含版本号的可执行程序/库。47.图4示出了根据本公开的一些实施例的构建装置的示意图。如图4所示,构建装置400包括:源代码获取模块401、计算模块405、版本号获取模块402、记录模块403以及构建模块404。其中,源代码获取模块401、记录模块403和构建模块404与图3中的构建装置300相似,本文就不再重复描述。48.构建装置400同图3所示的构建装置300的区别在于,构建装置400还包括计算装置405。计算装置405可以根据源代码获取模块401获取的源代码文件,计算能标识该源代码文件的识别码。如上所述,该识别码可以为源代码文件的哈希值,例如md5值或sha-1值等。49.图5示出根据本公开的一种示例性实施例的计算设备的框图,该计算设备是可应用于本公开的各方面的硬件设备的一个示例。50.参考图5,现在将描述一种计算设备700,该计算设备是可应用于本公开的各方面的硬件设备的一个示例。计算设备700可以是被配置用于实现处理和/或计算的任何机器,可以是但并不局限于工作站、服务器、桌上型计算机、膝上型计算机、平板计算机、个人数字助理、智能手机、车载计算机或者是它们的任何组合。前述的各种装置/服务器/客户端设备可全部地或者至少部分地由计算设备700或者类似设备或系统来实施。51.计算设备700可包括可能经由一个或多个接口与总线702连接或通信的组件。例如,计算设备700可包括总线702、一个或多个处理器704、一个或多个输入设备706以及一个或多个输出设备708。所述一个或多个处理器704可以是任何类型的处理器并且可以包括但不限于一个或多个通用处理器和/或一个或多个专用处理器(例如专门的处理芯片)。输入设备706可以是任何类型的能够向计算设备输入信息的设备并且可以包括但不限于鼠标、键盘、触摸屏、麦克风和/或远程控制器。输出设备708可以是任何类型的能够呈现信息的设备并且可以包括但不限于显示器、扬声器、视频/音频输出终端、振动器和/或打印机。计算设备700也可包括非瞬态存储设备710或者与所述非瞬态存储设备连接,所述非瞬态存储设备可以是非瞬态的并且能够实现数据存储的任何存储设备,并且所述非瞬态存储设备可以包括但不限于磁盘驱动器、光存储设备、固态存储器、软盘、软磁盘、硬盘、磁带或任何其它磁介质、光盘或任何其它光介质、rom(只读存储器)、ram(随机存取存储器)、高速缓冲存储器和/或任何存储芯片或盒式磁带、和/或计算机可从其读取数据、指令和/或代码的任何其它介质。非瞬态存储设备710可从接口分离。非瞬态存储设备710可具有用于实施上述方法和步骤的数据/指令/代码。计算设备700也可包括通信设备712。通信设备712可以是任何类型的能够实现与内部装置通信和/或与网络通信的设备或系统并且可以包括但不限于调制解调器、网卡、红外通信设备、无线通信设备和/或芯片组,例如bluetoothtm设备、1302.11设备、wifi设备、wimax设备、蜂窝通信设备和/或类似设备。52.总线702可以包括但不局限于工业标准结构(isa)总线、微通道结构(mca)总线、增强型isa(eisa)总线、视频电子标准协会(vesa)局部总线和外部设备互连(pci)总线。53.计算设备700还可包括工作存储器714,该工作存储器可以是任何类型的能够存储有利于处理器704的工作的指令和/或数据的工作存储器并且可以包括但不局限于随机存取存储器和/或只读存储设备。54.软件组件可位于工作存储器714中,这些软件组件包括但不限于操作系统716、一个或多个应用程序718、驱动程序和/或其它数据和代码。用于实现上述方法和步骤的指令可包含在所述一个或多个应用程序718中,并且前述各种装置/服务器/客户端设备的模块/单元/组件可通过处理器704读取和执行所述一个或多个应用程序718的指令来实现。55.也应该认识到可根据具体需求做出变化。例如,也可使用定制硬件,和/或特定组件可在硬件、软件、固件、中间件、微代码、硬件描述语言或其任何组合中实现。此外,可采用与其它计算设备、例如网络输入/输出设备等的连接。例如,可通过具有汇编语言或硬件编程语言(例如verilog、vhdl、c++)的编程硬件(例如,包括现场可编程门阵列(fpga)和/或可编程逻辑阵列(pla)的可编程逻辑电路)利用根据本公开的逻辑和算法来实现所公开的方法和设备的部分或全部。56.如在此所使用的,词语“示例性的”意指“用作示例、实例或说明”,而不是作为将被精确复制的“模型”。在此示例性描述的任意实现方式并不一定要被解释为比其它实现方式优选的或有利的。而且,本公开不受在上述
技术领域
:、
背景技术
:、
发明内容或具体实施方式中所给出的任何所表述的或所暗示的理论所限定。57.另外,仅仅为了参考的目的,还可以在下面描述中使用某种术语,并且因而并非意图限定。例如,除非上下文明确指出,否则涉及结构或元件的词语“第一”、“第二”和其它此类数字词语并没有暗示顺序或次序。58.还应理解,“包括/包含”一词在本文中使用时,说明存在所指出的特征、整体、步骤、操作、单元和/或组件,但是并不排除存在或增加一个或多个其它特征、整体、步骤、操作、单元和/或组件以及/或者它们的组合。59.在本公开中,术语“提供”从广义上用于涵盖获得对象的所有方式,因此“提供某对象”包括但不限于“购买”、“制备/制造”、“布置/设置”、“安装/装配”、和/或“订购”对象等。60.本领域技术人员应当意识到,在上述操作之间的边界仅仅是说明性的。多个操作可以结合成单个操作,单个操作可以分布于附加的操作中,并且操作可以在时间上至少部分重叠地执行。而且,另选的实施例可以包括特定操作的多个实例,并且在其他各种实施例中可以改变操作顺序。但是,其它的修改、变化和替换同样是可能的。因此,本说明书和附图应当被看作是说明性的,而非限制性的。61.虽然已经通过示例对本公开的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本公开的范围。在此公开的各实施例可以任意组合,而不脱离本公开的精神和范围。本领域的技术人员还应理解,可以对实施例进行多种修改而不脱离本公开的范围和精神。本公开的范围由所附权利要求来限定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1