CN105718296B - 编译依赖关系树的生成显示方法及装置 - Google Patents

编译依赖关系树的生成显示方法及装置 Download PDF

Info

Publication number
CN105718296B
CN105718296B CN201610258091.8A CN201610258091A CN105718296B CN 105718296 B CN105718296 B CN 105718296B CN 201610258091 A CN201610258091 A CN 201610258091A CN 105718296 B CN105718296 B CN 105718296B
Authority
CN
China
Prior art keywords
packet
resource
layer
level
dependence
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
Application number
CN201610258091.8A
Other languages
English (en)
Other versions
CN105718296A (zh
Inventor
张浦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yuanxin Information Technology Group Co ltd
Original Assignee
Yuanxin Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Yuanxin Technology filed Critical Yuanxin Technology
Priority to CN201610258091.8A priority Critical patent/CN105718296B/zh
Publication of CN105718296A publication Critical patent/CN105718296A/zh
Application granted granted Critical
Publication of CN105718296B publication Critical patent/CN105718296B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例提供了编译依赖关系树的生成显示方法及装置,所述方法包括:对于软件平台中的一个资源包,根据预先生成的资源表中该资源包对应的依赖信息,确定出该资源包的编译层级;分别根据预先生成的结果表、依赖表中该资源包对应的依赖包索引、输出包索引,确定出该资源包的上层、下层编译依赖关系;根据软件平台中多个资源包各自的编译层级,以及上层、下层编译依赖关系,生成该软件平台的编译依赖关系树并显示。用户可根据本发明实施例提供的编译依赖关系树,容易地确定出待编译的资源包,编译时所需的各层级的依赖包,及各依赖包之间的编译顺序等编译依赖关系,从而大大提升编译效率,并可防止因依赖错误或编译顺序错误而导致的编译错误。

Description

编译依赖关系树的生成显示方法及装置
技术领域
本发明涉及软件编译技术领域,具体而言,本发明涉及一种编译依赖关系树的生成显示方法及装置。
背景技术
随着技术的发展,很多用户在服务方提供的软件平台上编译软件,并将编译后软件打包成资源包,进行发布或者共享等等。
例如,OBS(Open Build Service)软件平台提供多种软件的编译服务。OBS软件平台支持对多种操作系统进行编译打包。多种操作系统包括Linux及其衍生系统;例如openSUSE、Debian、Fedora、Ubuntu、Red Hat Enterprise Linux、SUSE Linux Enterprise等。
以Linux及其衍生系统为例,目前Linux系统的多个发行版所各自采用的封包格式、每个资源包编译时所依赖的依赖包通常不同,以及资源包编译输出后的输出包通常也不相同,造成资源包编译的拓扑排序的数据结果非常复杂。整个软件平台中,存在大量的资源包,资源包之间的编译依赖关系非常复杂;例如,一个资源包A既可以是另一个资源包B编译时所需的依赖包,又可以是资源包C编译后输出的输出包。
本发明的发明人发现,目前的软件平台通常并不提供资源包之间的编译依赖关系。对于在软件平台上编译资源包的用户而言,自行了解整个软件平台的各资源包之间的编译依赖关系,工作量十分巨大,几乎是不可能完成的任务。因此,目前用户通常是利用最近的记载有编译依赖关系的文件,例如spec文件,自行修改该文件中的编译资源包所需的依赖包、以及各依赖包的编译顺序等编译依赖关系;之后进行资源包的编译打包;容易导致编译效率低下,编译错误等等。
发明内容
本发明针对现有方式的缺点,提出一种编译依赖关系树的生成显示方法及装置,用以解决现有技术存在不提供编译依赖关系而导致编译效率低下的问题。
本发明的实施例根据一个方面,提供了一种编译依赖关系树的生成显示方法,包括:
对于软件平台中的一个资源包,根据预先生成的资源表中该资源包对应的依赖信息,确定出该资源包的编译层级;
分别根据预先生成的结果表、依赖表中该资源包对应的依赖包索引、输出包索引,确定出该资源包的上层、下层编译依赖关系;
根据所述软件平台中多个资源包各自的编译层级,以及上层、下层编译依赖关系,生成该软件平台的编译依赖关系树并显示。
较佳地,所述资源表是通过下述方法预先生成的:
对于所述软件平台中的每个资源包,将该资源包名、依赖包名、输出包名、以及该资源包的层级都导入所述资源表的一条记录中,并设置所述层级为空;
将所述软件平台中的一个资源包作为源包,采用递归方式确定源包的依赖包;
在一层递归中,将上层递归的依赖包作为本层递归的源包,进而确定出本层递归的源包的依赖包,直到确定出的依赖包为库文件包,结束递归;
将所述库文件包的层级设置为最小层级后,对于每层递归,将该层递归的源包的层级设置为该层递归的依赖包的层级加一,得到各资源包的层级。
较佳地,所述确定出本层递归的源包的依赖包,包括:
针对所述本层递归的源包,确定出所述结果表中该源包对应的依赖包索引指向的所述资源表中的资源包,作为该源包的依赖包。
较佳地,所述将该层递归的源包的层级设置为该层递归的依赖包的层级加一,具体包括:
若确定出一层递归的源包的多个依赖包,则将该层递归的源包的层级设置为所述多个依赖包中的最大层级加一。
较佳地,所述编译依赖关系树的生成显示方法还包括:
当确定出一层递归的源包的依赖包为排除包时,将该层递归的依赖包的层级设置为最小层级。
本发明的实施例根据另一个方面,还提供了一种编译依赖关系树的生成显示装置,包括:
编译层级确定模块,用于对于软件平台中的一个资源包,根据预先生成的资源表中该资源包对应的依赖信息,确定出该资源包的编译层级;
编译依赖关系确定模块,用于分别根据预先生成的结果表、依赖表中该资源包对应的依赖包索引、结果表索引,确定出该资源包的上层、下层编译依赖关系;
编译依赖关系树显示模块,用于根据所述软件平台中多个资源包各自的编译层级,以及上层、下层编译依赖关系,生成该软件平台的编译依赖关系树并显示。
较佳地,所述编译依赖关系树的生成显示装置,还包括:
资源表生成模块,用于对于所述软件平台中的每个资源包,将该资源包名、依赖包名、输出包名、以及该资源包的层级都导入所述资源表的一条记录中,并设置所述层级为空;将所述软件平台中的一个资源包作为源包,采用递归方式确定源包的依赖包;在一层递归中,将上层递归的依赖包作为本层递归的源包,进而确定出本层递归的源包的依赖包,直到确定出的依赖包为库文件包,结束递归;将所述库文件包的层级设置为最小层级后,对于每层递归,将该层递归的源包的层级设置为该层递归的依赖包的层级加一,得到各资源包的层级。
较佳地,所述资源表生成模块,具体包括:
资源表初始化单元,用于对于所述软件平台中的每个资源包,将该资源包名、依赖包名、输出包名、以及该资源包的层级都导入所述资源表的一条记录中,并设置所述层级为空;
依赖包确定单元,用于将所述软件平台中的一个资源包作为源包,采用递归方式确定源包的依赖包;在一层递归中,将上层递归的依赖包作为本层递归的源包,进而确定出本层递归的源包的依赖包,直到确定出的依赖包为库文件包,结束递归;
层级设置单元,用于将所述库文件包的层级设置为最小层级后,对于每层递归,将该层递归的源包的层级设置为该层递归的依赖包的层级加一,得到各资源包的层级。
较佳地,所述依赖包确定单元还用于确定出一层递归的源包的多个依赖包;以及
所述层级设置单元还用于将该层递归的源包的层级设置为所述依赖包确定单元确定出的多个依赖包中的最大层级加一。
较佳地,所述依赖包确定单元还用于当确定出一层递归的源包的依赖包为排除包时,发送排除包通知;
所述层级设置单元还用于接收到所述排除包通知后,将该层递归的依赖包的层级设置为最小层级。
本发明实施例中,对于软件平台中的一个资源包,根据预先生成的资源表中该资源包对应的依赖信息,确定出该资源包的编译层级;分别根据预先生成的结果表、依赖表中该资源包对应的依赖包索引、结果表索引,确定出该资源包的上层、下层编译依赖关系;根据软件平台中多个资源包各自的编译层级,以及上层、下层编译依赖关系,生成该软件平台的编译依赖关系树并显示。用户可以根据本发明实例提供的编译依赖关系树,容易地确定出待编译的资源包,编译时所需的各层级的依赖包,以及各依赖包之间的编译顺序等编译依赖关系,从而大大提升编译效率,并可以防止因依赖错误或者编译顺序错误而导致的编译错误。
而且,利用本发明的实施例中的编译依赖关系树,可以追溯每个资源包的编译序列,有利于查找问题,有利于对资源包的发行版进行二次修改及优化。
进一步,利用本发明的实施例中的编译依赖关系树,可以在设定范围内,预估编译资源包所需的时间。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明实施例的资源表的生成方法的流程示意图;
图2为本发明实施例的编译依赖关系树的生成显示方法的流程示意图;
图3为本发明实施例的编译依赖关系树的生成显示装置的内部结构的示意图;
图4为本发明实施例的资源表生成模块的内部结构的框架示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
本技术领域技术人员可以理解,这里所使用的“终端”、“终端设备”既包括无线信号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件的设备,其具有能够在双向通信链路上,进行双向通信的接收和发射硬件的设备。这种设备可以包括:蜂窝或其他通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备;PCS(Personal Communications Service,个人通信系统),其可以组合语音、数据处理、传真和/或数据通信能力;PDA(Personal Digital Assistant,个人数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、日历和/或GPS(Global Positioning System,全球定位系统)接收器;常规膝上型和/或掌上型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算机或其他设备。这里所使用的“终端”、“终端设备”可以是便携式、可运输、安装在交通工具(航空、海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和/或以分布形式,运行在地球和/或空间的任何其他位置运行。这里所使用的“终端”、“终端设备”还可以是通信终端、上网终端、音乐/视频播放终端,例如可以是PDA、MID(Mobile Internet Device,移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒等设备。
本发明实施例中,对于软件平台中的一个资源包,根据预先生成的资源表中该资源包对应的依赖信息,确定出该资源包的编译层级;分别根据预先生成的结果表、依赖表中该资源包对应的依赖包索引、结果表索引,确定出该资源包的上层、下层编译依赖关系;根据软件平台中多个资源包各自的编译层级,以及上层、下层编译依赖关系,生成该软件平台的编译依赖关系树并显示。用户可以根据本发明实例提供的编译依赖关系树,容易地确定出待编译的资源包,编译时所需的各层级的依赖包,以及各依赖包之间的编译顺序等编译依赖关系,从而大大提升编译效率,并可以防止因依赖错误或者编译顺序错误而导致的编译错误。
下面结合附图具体介绍本发明实施例的技术方案。
本发明实施例中,在生成编译依赖关系树之前,构建资源表、结果表和依赖表。较佳地,构建排除表。
本发明实施例中,资源表的生成方法的流程示意图如图1所示,包括如下步骤:
S101:创建资源表并初始化,创建结果表。
创建资源表,并在资源表中设置如下几个字段:资源包名、资源包的依赖包名、资源包的输出包名、和资源包的层级。对于一个资源包,依赖包为编译资源包所需要的资源包;输出包为资源包编译后输出的资源包。也就是说,根据依赖包编译资源包,资源包编译后得到输出包。
对于软件平台中的每个资源包,将该资源包名、依赖包名、输出包名、以及该资源包的层级都导入资源表的一条记录中,并设置该资源包的层级为空。
创建结果表,并在结果表中设置如下几个字段:资源包名字段和依赖包索引字段。对于软件平台中的每个资源包,将该资源包名、该资源包的依赖包索引,分别导入结果表的一条记录的输出包名字段、依赖包索引字段中,并将依赖包索引指向资源表中该资源包名。
较佳地,创建依赖表,并在依赖表中设置如下几个字段:资源包名字段和输出包索引字段。对于软件平台中的每个资源包,将该资源包名、该资源包的输出包索引,分别导入依赖表的一条记录的依赖包名字段、输出包索引字段中,并将输出包索引指向资源表中该资源包名。
较佳地,创建排除表,并在排除表中设置资源包名字段。对于软件平台中的每个最底层的资源包,例如编译工具集合autoconf、automake、libtools等资源包,将该资源包名导入到排除表的一条记录的资源包名字段中。最底层的资源包,通常不需要依赖其它资源包,直接可以由编译环境提供编译后的输出包输出。包名记载于排除表中资源包也可称为排除包,其编译层级为最小层级。
S102:对于每个资源包,确定出该资源包的至少一个层级的依赖包。
具体地,对于软件平台中的每个资源包,将该资源包作为源包,采用递归方式确定源包的依赖包;在一层递归中,将上层递归的依赖包作为本层递归的源包,进而确定出本层递归的源包的依赖包,直到确定出的依赖包为库文件包,结束递归。
较佳地,针对本层递归的源包,确定出结果表中该源包对应的依赖包索引指向的资源表中的资源包,作为该源包的依赖包。
例如,对于待编译的资源包A,采用递归方式确定资源包A的依赖包;在第一层递归中,将资源包A与结果表进行匹配;若从结果表中查找出资源包A,则确定匹配成功,并从结果表中确定出资源包A对应的依赖包B的索引,根据依赖包B的索引从资源表中查找出依赖包B所属的记录中的层级;若查找出的层级为空,则继续在下一层递归中查询资源包B的依赖包;直到查找出的依赖包为库文件包,例如c库包。
S103:设置资源表中每个资源包对应的层级。
具体地,对于上述步骤S102中作为源包的资源包,将库文件包的层级设置为最小层级后,对于每层递归,将该层递归的源包的层级设置为该层递归的依赖包的层级加一,得到该源包所涉及的各资源包的层级。
较佳地,对于上述步骤S102中作为源包的资源包,将库文件包在资源表中的层级设置为最小层级后,对于每层递归,将该层递归的源包在资源表中的层级设置为该层递归的依赖包在资源表中的层级加一,得到该源包所涉及的各资源包的层级。
例如,将上述步骤102中最后一层递归确定出的库文件包的层级设置为最小层级0层级;将倒数第二层递归中,将该库文件包作为依赖包的源包的层级设置为最小层级加一,即1层级;对于每层递归,将该层递归的源包的层级设置为依赖包的层级加一,依次类推,层级逐层增加,直到设置完初始的资源包A的层级。
在上述步骤S102中将软件平台中的每个资源包遍历作为源包,可以确定出每个资源包的所有依赖包;在本步骤中,可以设置软件平台中每个资源包的层级,得到完整的资源表。
较佳地,对于每层递归,若上述步骤S102中确定出该层递归的源包的多个依赖包,则在本步骤中,将该层递归的源包的层级设置为多个依赖包中的最大层级加一。可以理解,多个依赖包中每个依赖包,可以根据该依赖包的包名从资源表中查找出对应的层级。多个依赖包对应多个层级,多个层级中最大层级,即为多个依赖包中的最大层级。
例如,同一次递归中,资源包X依赖资源包Y1、资源包Y2和资源包Y3;查找出资源包Y1、Y2、Y3各自的层级分别为Z1、Z2、Z3;若Z1为Z1、Z2和Z3中的最大层级,则将资源包X的层级设置为Z1加一。
较佳地,当上述步骤S102中确定出一层递归的源包的依赖包为排除包时,在本步骤中将该层递归的依赖包的层级设置为最小层级。
具体地,在上述步骤S102中,对于一层递归,当确定出该层递归的源包的依赖包名,与上述排除表中的资源包名相匹配时,确定该层递归的源包的依赖包为排除包,在本步骤中将该层递归的依赖包的层级设置为最小层级。
本发明实施例中,编译依赖关系树的生成显示方法的流程示意图如图2所示,包括如下步骤:
S201:对于软件平台中的一个资源包,根据预先生成的资源表中该资源包对应的依赖信息,确定出该资源包的编译层级。
具体地,对于软件平台中的一个资源包,从预先生成的资源表中查找出该资源包名,进而查找出该资源包名所属记录中的依赖信息,根据查找出的该资源包名的依赖信息,确定出该资源包的编译层级。
资源表中资源包对应的依赖信息包括:资源表中该资源包名所属记录中的层级;该依赖信息还可以包括:资源表中该资源包名所属记录中的依赖包名。
例如,对于一个资源包,将资源表中该资源包名所属记录中的层级,确定为该资源包的编译层级。
较佳地,对于一个资源包,若资源表中该资源包名所属记录中的层级为空,则可以基于与上述步骤S102-S103中同样的方法,确定出该资源包名所属记录中的层级,具体方法不再赘述。
S202:分别根据预先生成的结果表、依赖表中该资源包对应的依赖包索引、输出包索引,确定出该资源包的上层、下层编译依赖关系。
具体地,对于软件平台中的一个资源包,从预先生成的结果表中查找出该资源包名对应的依赖包索引,根据该依赖包索引从资源表中查找出资源包名,将查找出的资源包名所属的资源包,确定为该资源包的依赖包,得到该资源包的直接上层编译依赖关系。
对于软件平台中的一个资源包,从预先生成的依赖表中查找出该资源包名对应的输出包索引,根据该输出包索引从资源表中查找出资源包名,将查找出的资源包名所属的资源包,确定为该资源包的输出包,得到该资源包的直接下层编译依赖关系。
较佳地,对于软件平台中的一个资源包,将该资源包作为源包,采用递归方式确定源包的依赖包;在一层递归中,将上层递归的依赖包作为本层递归的源包,从预先生成的结果表中查找出该源包的资源包名对应的依赖包索引,根据该依赖包索引从资源表中查找出资源包名,将资源包名所属的资源包确定为本层递归的源包的依赖包,直到确定出的依赖包为库文件包,结束递归。从而得到一个资源包的所有层级的依赖包,得到该资源包的所有上层编译依赖关系。
对于软件平台中的一个资源包,将该资源包作为源包,采用递归方式确定源包的输出包;在一层递归中,将上层递归的输出包作为本层递归的源包,从预先生成的依赖表中查找出该源包的资源包名对应的输出包索引,根据该输出包索引从资源表中查找出资源包名,将资源包名所属的资源包确定为本层递归的源包的输出包,直到确定出的输出包为最顶层的资源包,结束递归。从而得到一个资源包的所有层级的输出包,得到该资源包的所有下层编译依赖关系。
S203:根据软件平台中多个资源包各自的编译层级,以及上层、下层编译依赖关系,生成该软件平台的编译依赖关系树并显示。
具体地,对于软件平台中多个资源包中的每个资源包,根据该资源在上述步骤S201中确定的编译层级,以及该资源包在上述步骤S202中确定出的直接上层编译依赖关系、直接下层编译依赖关系,生成多个资源包的编译依赖关系树,作为该软件平台的编译依赖关系树。较佳地,多个资源包可以是软件平台中的所有资源包。
较佳地,对于软件平台中多个资源包中的每个资源包,根据该资源在上述步骤S201中确定的编译层级,以及该资源包在上述步骤S202中确定出的所有上层编译依赖关系、所有下层编译依赖关系,生成该软件平台的编译依赖关系树。
显示生成的编译依赖关系树。
较佳地,根据编译依赖关系树,确定出编译拓扑序列,以图或表的形式显示编译拓扑序列。
事实上,本发明实施例中的编译依赖关系树对应于有向无环图。
有向无环图(Directed Acyclic Graph,DAG)是有向图的一种,如果一个有向图无法从某个顶点出发经过若干条边回到该点,则这个图是一个有向无环图,字面意思的理解就是图中没有环。本发明实施例中被用来表示资源包之间的编译依赖关系。
拓扑排序是对DAG的顶点进行排序,是将DAG中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。或者使得对每一条有向边(u,v),均有u在线性序列中比v先出现。亦可理解为对某点v而言,只有当v的所有源点均出现了,v才能出现。通常,这样的线性序列称为满足拓扑次序(TopologicalOrder)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。
因此,本发明实施例中的编译依赖关系树可以用有向无环图的形式显示。
基于上述编译依赖关系树的生成显示方法,本发明实施例还提供了编译依赖关系树的生成显示装置,该装置的内部结构的框架示意图如图3所示,包括:编译层级确定模块301、编译依赖关系确定模块302和编译依赖关系树显示模块303。
编译层级确定模块301用于对于软件平台中的一个资源包,根据预先生成的资源表中该资源包对应的依赖信息,确定出该资源包的编译层级。
编译依赖关系确定模块302用于分别根据预先生成的结果表、依赖表中该资源包对应的依赖包索引、结果表索引,确定出该资源包的上层、下层编译依赖关系。
编译依赖关系树显示模块303用于根据软件平台中多个资源包各自的编译层级,以及上层、下层编译依赖关系,生成该软件平台的编译依赖关系树并显示。
更优的,如图3所示,本发明实施例的编译依赖关系树的生成显示装置,还包括:资源表生成模块304。
资源表生成模块304用于对于软件平台中的每个资源包,将该资源包名、依赖包名、输出包名、以及该资源包的层级都导入资源表的一条记录中,并设置层级为空;将软件平台中的一个资源包作为源包,采用递归方式确定源包的依赖包;在一层递归中,将上层递归的依赖包作为本层递归的源包,进而确定出本层递归的源包的依赖包,直到确定出的依赖包为库文件包,结束递归;将库文件包的层级设置为最小层级后,对于每层递归,将该层递归的源包的层级设置为该层递归的依赖包的层级加一,得到各资源包的层级。
上述编译层级确定模块301、编译依赖关系确定模块302、编译依赖关系树显示模块303和资源表生成模块304功能的实现方法,可以参考如上图1-2所示的流程步骤的具体内容,此处不再赘述。
更优的,本发明实施例的资源表生成模块304的内部结构的框架示意图如图4所示,包括:资源表初始化单元401、依赖包确定单元402和层级设置单元403。
其中,资源表初始化单元401用于对于软件平台中的每个资源包,将该资源包名、依赖包名、输出包名、以及该资源包的层级都导入资源表的一条记录中,并设置层级为空。
依赖包确定单元402用于将软件平台中的一个资源包作为源包,采用递归方式确定源包的依赖包;在一层递归中,将上层递归的依赖包作为本层递归的源包,进而确定出本层递归的源包的依赖包,直到确定出的依赖包为库文件包,结束递归。较佳地,依赖包确定单元402针对本层递归的源包,确定出结果表中该源包对应的依赖包索引指向的资源表中的资源包,作为该源包的依赖包。
层级设置单元403用于将库文件包的层级设置为最小层级后,对于每层递归,将该层递归的源包的层级设置为该层递归的依赖包的层级加一,得到各资源包的层级。
较佳地,层级设置单元403将库文件包在资源表中的层级设置为最小层级后,对于每层递归,将该层递归的源包在资源表中的层级设置为该层递归的依赖包在资源表中的层级加一,得到该源包所涉及的各资源包的层级。
进一步,依赖包确定单元402还用于确定出一层递归的源包的多个依赖包。
以及,层级设置单元403还用于将该层递归的源包的层级设置为依赖包确定单元402确定出的多个依赖包中的最大层级加一。
进一步,依赖包确定单元402还用于当确定出一层递归的源包的依赖包为排除包时,发送排除包通知。
层级设置单元403还用于接收到排除包通知后,将该层递归的依赖包的层级设置为最小层级。
上述资源表生成模块304中的资源表初始化单元401、依赖包确定单元402和层级设置单元403功能的实现方法,可以参考如上图1-2所示的流程步骤的具体内容,此处不再赘述。
本发明实施例中,对于软件平台中的一个资源包,根据预先生成的资源表中该资源包对应的依赖信息,确定出该资源包的编译层级;分别根据预先生成的结果表、依赖表中该资源包对应的依赖包索引、结果表索引,确定出该资源包的上层、下层编译依赖关系;根据软件平台中多个资源包各自的编译层级,以及上层、下层编译依赖关系,生成该软件平台的编译依赖关系树并显示。用户可以根据本发明实例提供的编译依赖关系树,容易地确定出待编译的资源包,编译时所需的各层级的依赖包,以及各依赖包之间的编译顺序等编译依赖关系,从而大大提升编译效率,并可以防止因依赖错误或者编译顺序错误而导致的编译错误。
而且,利用本发明的实施例中的编译依赖关系树,可以追溯每个资源包的编译序列,有利于查找问题,有利于对资源包的发行版进行二次修改及优化。
进一步,利用本发明的实施例中的编译依赖关系树,可以在设定范围内,预估编译资源包所需的时间。
本技术领域技术人员可以理解,本发明包括涉及用于执行本申请中所述操作中的一项或多项的设备。这些设备可以为所需的目的而专门设计和制造,或者也可以包括通用计算机中的已知设备。这些设备具有存储在其内的计算机程序,这些计算机程序选择性地激活或重构。这样的计算机程序可以被存储在设备(例如,计算机)可读介质中或者存储在适于存储电子指令并分别耦联到总线的任何类型的介质中,所述计算机可读介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随即存储器)、EPROM(Erasable ProgrammableRead-Only Memory,可擦写可编程只读存储器)、EEPROM(Electrically ErasableProgrammable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,可读介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。
本技术领域技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领域技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本发明公开的结构图和/或框图和/或流图的框或多个框中指定的方案。
本技术领域技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (8)

1.一种编译依赖关系树的生成显示方法,其特征在于,包括:
对于软件平台中的一个资源包,根据预先生成的资源表中该资源包对应的依赖信息,确定出该资源包的编译层级;
分别根据预先生成的结果表、依赖表中该资源包对应的依赖包索引、输出包索引,确定出该资源包的上层、下层编译依赖关系;
根据所述软件平台中多个资源包各自的编译层级,以及上层、下层编译依赖关系,生成该软件平台的编译依赖关系树并显示;
所述资源表是通过下述方法预先生成的:
对于所述软件平台中的每个资源包,将该资源包名、依赖包名、输出包名、以及该资源包的层级都导入所述资源表的一条记录中,并设置所述层级为空;
将所述软件平台中的一个资源包作为源包,采用递归方式确定源包的依赖包;
在一层递归中,将上层递归的依赖包作为本层递归的源包,进而确定出本层递归的源包的依赖包,直到确定出的依赖包为库文件包,结束递归;
将所述库文件包的层级设置为最小层级后,对于每层递归,将该层递归的源包的层级设置为该层递归的依赖包的层级加一,得到各资源包的层级。
2.根据权利要求1所述的方法,其特征在于,所述确定出本层递归的源包的依赖包,包括:
针对所述本层递归的源包,确定出所述结果表中该源包对应的依赖包索引指向的所述资源表中的资源包,作为该源包的依赖包。
3.根据权利要求1所述的方法,其特征在于,所述将该层递归的源包的层级设置为该层递归的依赖包的层级加一,具体包括:
若确定出一层递归的源包的多个依赖包,则将该层递归的源包的层级设置为所述多个依赖包中的最大层级加一。
4.根据权利要求1所述的方法,其特征在于,还包括:
当确定出一层递归的源包的依赖包为排除包时,将该层递归的依赖包的层级设置为最小层级。
5.一种编译依赖关系树的生成显示装置,其特征在于,包括:
编译层级确定模块,用于对于软件平台中的一个资源包,根据预先生成的资源表中该资源包对应的依赖信息,确定出该资源包的编译层级;
编译依赖关系确定模块,用于分别根据预先生成的结果表、依赖表中该资源包对应的依赖包索引、结果表索引,确定出该资源包的上层、下层编译依赖关系;
编译依赖关系树显示模块,用于根据所述软件平台中多个资源包各自的编译层级,以及上层、下层编译依赖关系,生成该软件平台的编译依赖关系树并显示;
资源表生成模块,用于对于所述软件平台中的每个资源包,将该资源包名、依赖包名、输出包名、以及该资源包的层级都导入所述资源表的一条记录中,并设置所述层级为空;将所述软件平台中的一个资源包作为源包,采用递归方式确定源包的依赖包;在一层递归中,将上层递归的依赖包作为本层递归的源包,进而确定出本层递归的源包的依赖包,直到确定出的依赖包为库文件包,结束递归;将所述库文件包的层级设置为最小层级后,对于每层递归,将该层递归的源包的层级设置为该层递归的依赖包的层级加一,得到各资源包的层级。
6.根据权利要求5所述的装置,其特征在于,所述资源表生成模块,具体包括:
资源表初始化单元,用于对于所述软件平台中的每个资源包,将该资源包名、依赖包名、输出包名、以及该资源包的层级都导入所述资源表的一条记录中,并设置所述层级为空;
依赖包确定单元,用于将所述软件平台中的一个资源包作为源包,采用递归方式确定源包的依赖包;在一层递归中,将上层递归的依赖包作为本层递归的源包,进而确定出本层递归的源包的依赖包,直到确定出的依赖包为库文件包,结束递归;
层级设置单元,用于将所述库文件包的层级设置为最小层级后,对于每层递归,将该层递归的源包的层级设置为该层递归的依赖包的层级加一,得到各资源包的层级。
7.根据权利要求6所述的装置,其特征在于,
所述依赖包确定单元还用于确定出一层递归的源包的多个依赖包;以及
所述层级设置单元还用于将该层递归的源包的层级设置为所述依赖包确定单元确定出的多个依赖包中的最大层级加一。
8.根据权利要求6所述的装置,其特征在于,
所述依赖包确定单元还用于当确定出一层递归的源包的依赖包为排除包时,发送排除包通知;
所述层级设置单元还用于接收到所述排除包通知后,将该层递归的依赖包的层级设置为最小层级。
CN201610258091.8A 2016-04-21 2016-04-21 编译依赖关系树的生成显示方法及装置 Active CN105718296B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610258091.8A CN105718296B (zh) 2016-04-21 2016-04-21 编译依赖关系树的生成显示方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610258091.8A CN105718296B (zh) 2016-04-21 2016-04-21 编译依赖关系树的生成显示方法及装置

Publications (2)

Publication Number Publication Date
CN105718296A CN105718296A (zh) 2016-06-29
CN105718296B true CN105718296B (zh) 2019-11-08

Family

ID=56161513

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610258091.8A Active CN105718296B (zh) 2016-04-21 2016-04-21 编译依赖关系树的生成显示方法及装置

Country Status (1)

Country Link
CN (1) CN105718296B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106886442A (zh) * 2017-03-06 2017-06-23 中山大学 一种软件依赖关系分析方法
CN107704246A (zh) * 2017-10-12 2018-02-16 北京元心科技有限公司 终端、编译的方法及装置
CN108536463B (zh) * 2018-04-09 2021-12-21 深圳市腾讯网络信息技术有限公司 获取资源包的方法、装置、设备及计算机可读存储介质
CN108984207A (zh) * 2018-06-14 2018-12-11 珠海金山网络游戏科技有限公司 一种安装包无效资源文件检测的方法
CN109491661B (zh) * 2018-10-24 2022-06-24 武汉思普崚技术有限公司 通用交叉编译方法及设备
CN111026397B (zh) * 2019-10-22 2022-12-20 烽火通信科技股份有限公司 一种rpm包分布式编译方法及装置
CN113692572A (zh) * 2020-01-21 2021-11-23 深圳元戎启行科技有限公司 编译方法和装置、计算机设备、计算机可读存储介质
CN115934106B (zh) * 2023-03-14 2023-06-02 麒麟软件有限公司 快速检测apt仓库源依赖完整性的方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102880466A (zh) * 2012-09-04 2013-01-16 中标软件有限公司 一种Linux操作系统软件包依赖关系检测方法
CN103020075A (zh) * 2011-09-23 2013-04-03 启碁科技股份有限公司 分析目标对象的依赖关系的方法
CN103870310A (zh) * 2014-02-18 2014-06-18 小米科技有限责任公司 程序编译方法及相关装置
CN104866369A (zh) * 2015-05-22 2015-08-26 广州华多网络科技有限公司 一种数据处理的方法以及装置
CN104915214A (zh) * 2015-06-25 2015-09-16 走遍世界(北京)信息技术有限公司 系统的发布方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103020075A (zh) * 2011-09-23 2013-04-03 启碁科技股份有限公司 分析目标对象的依赖关系的方法
CN102880466A (zh) * 2012-09-04 2013-01-16 中标软件有限公司 一种Linux操作系统软件包依赖关系检测方法
CN103870310A (zh) * 2014-02-18 2014-06-18 小米科技有限责任公司 程序编译方法及相关装置
CN104866369A (zh) * 2015-05-22 2015-08-26 广州华多网络科技有限公司 一种数据处理的方法以及装置
CN104915214A (zh) * 2015-06-25 2015-09-16 走遍世界(北京)信息技术有限公司 系统的发布方法及装置

Also Published As

Publication number Publication date
CN105718296A (zh) 2016-06-29

Similar Documents

Publication Publication Date Title
CN105718296B (zh) 编译依赖关系树的生成显示方法及装置
US8819012B2 (en) Accessing anchors in voice site content
Wang et al. Efficient route planning on public transportation networks: A labelling approach
US9367304B2 (en) Integrated development environment-based repository searching in a networked computing environment
US10445334B1 (en) Query transmission in type-limited interchange formats
CN106897205A (zh) 一种测试数据生成方法及装置
CN102012954B (zh) 用于系统芯片集成设计的子系统集成方法及其子系统集成系统
CN106569869A (zh) 插件化打包方法及装置
CN104424302B (zh) 一种同类数据对象的匹配方法和装置
CN105677302A (zh) 一种应用程序模块化开发方法以及装置
CN103430578A (zh) 用于标识多个字符串中的对话的方法和装置
CN108197036A (zh) 用于确定增量代码的覆盖率信息的方法和装置
CN102819766A (zh) 一种表单校验方法、装置及企业系统
CN102985922A (zh) 在计算空间中管理分布计算的方法和装置
CN106547520A (zh) 一种代码路径分析方法及装置
CN104462352A (zh) 数据打包方法及装置
CN110019865A (zh) 海量图片处理方法、装置、电子设备及存储介质
CN107797823A (zh) 业务规则管理方法、装置、存储介质和计算机设备
CN101968736A (zh) 一种应用于Java到C++语言程序翻译中外部引用的翻译方法
Cox et al. SISSVoc: A Linked Data API for access to SKOS vocabularies
CN110134302A (zh) 快速定位节点的方法、装置、介质和电子设备
US10782944B2 (en) Optimizing a cache of compiled expressions by removing variability
CN110019363A (zh) 一种校验数据的方法和装置
KR101097660B1 (ko) 무선 방송 스트림에서 xml 질의 처리 방법
CN110443034A (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
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20210127

Address after: 101300 room 153, 1 / F, building 17, 16 Caixiang East Road, Nancai Town, Shunyi District, Beijing

Patentee after: Yuanxin Information Technology Group Co.,Ltd.

Address before: 100176 room 2222, building D, building 33, 99 Kechuang 14th Street, Beijing Economic and Technological Development Zone, Beijing

Patentee before: BEIJING YUANXIN SCIENCE & TECHNOLOGY Co.,Ltd.

TR01 Transfer of patent right
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20160629

Assignee: Beijing Yuanxin Junsheng Technology Co.,Ltd.

Assignor: Yuanxin Information Technology Group Co.,Ltd.

Contract record no.: X2021110000018

Denomination of invention: Generation and display method and device of compiling dependency tree

Granted publication date: 20191108

License type: Common License

Record date: 20210531

EE01 Entry into force of recordation of patent licensing contract