CN113986236A - 工程编译方法、装置、电子设备、存储介质 - Google Patents

工程编译方法、装置、电子设备、存储介质 Download PDF

Info

Publication number
CN113986236A
CN113986236A CN202111162658.9A CN202111162658A CN113986236A CN 113986236 A CN113986236 A CN 113986236A CN 202111162658 A CN202111162658 A CN 202111162658A CN 113986236 A CN113986236 A CN 113986236A
Authority
CN
China
Prior art keywords
sub
projects
project
compiling
engineering
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
Application number
CN202111162658.9A
Other languages
English (en)
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.)
Spreadtrum Communications Shanghai Co Ltd
Original Assignee
Spreadtrum Communications Shanghai Co Ltd
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 Spreadtrum Communications Shanghai Co Ltd filed Critical Spreadtrum Communications Shanghai Co Ltd
Priority to CN202111162658.9A priority Critical patent/CN113986236A/zh
Publication of CN113986236A publication Critical patent/CN113986236A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/47Retargetable compilers

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了工程编译方法、装置、电子设备、存储介质。所述工程编译方法包括:响应于针对多个工程的并发编译请求,确定所述多个工程中各个工程包含的子工程的依赖关系,所述多个工程中至少存在两个目标工程,所述目标工程中存在至少一个子工程与其他目标工程中的子工程相同;根据所述依赖关系确定所述多个工程的所有子工程的编译顺序;调用编译器,并使所述编译器根据所述编译顺序对子工程进行编译。从而可以提高多个工程的编译效率。

Description

工程编译方法、装置、电子设备、存储介质
技术领域
本发明涉及一种工程编译方法、装置、电子设备、存储介质。
背景技术
工程开发完成后,需要对其进行编译并且编译无错误后,才能发布于生产环境中使用。目前,编译器不支持并发编译,对于多个工程独立进行编译,不仅效率低,还占用较多的编译资源。
发明内容
本发明要解决的技术问题是为了克服现有技术中编译器不支持并发编译,对于多个工程独立进行编译,不仅效率低,还占用较多的编译资源的缺陷,提供一种工程编译方法、装置、电子设备、存储介质。
本发明是通过下述技术方案来解决上述技术问题:
第一方面,提供一种工程编译方法,所述工程编译方法包括:
响应于针对多个工程的并发编译请求,确定所述多个工程中各个工程包含的子工程的依赖关系,所述多个工程中至少存在两个目标工程,所述目标工程中存在至少一个子工程与其他目标工程中的子工程存在依赖关系;
根据所述依赖关系确定所述多个工程的所有子工程的编译顺序;
调用编译器,并使所述编译器根据所述编译顺序对子工程进行编译。
可选地,根据所述依赖关系确定所述多个工程的所有子工程的编译顺序,包括:
整合所述多个工程中各个工程包含的子工程的依赖关系,根据整合后的依赖关系确定所述所有子工程的编译顺序;
或者,根据所述依赖关系确定各个工程所包含的子工程的初始编译顺序,整合各个初始编译顺序,得到所述所有子工程的编译顺序。
可选地,调用编译器,包括:
调用多个编译器,以对所述子工程进行并发编译;调用的多个编译器的数量与当前时刻待编译的子工程的数量相匹配。
可选地,调用编译器,包括:
调用所述编译器的多个进程,以对所述子工程进行并发编译;所述多个进程的数量与当前时刻待编译的子工程的数量相匹配。
可选地,还包括:
在所述编译器生成编译错误而导致编译中断的情况下,确定所述编译错误的类型;
若所述编译错误的类型包括第一预设类型,则提示编译错误;
若所述编译错误的类型不包括第一预设类型,自动对所述工程进行重新编译。
第二方面,提供一种工程编译装置,所述工程编译装置包括:
第一确定模块,用于响应于针对多个工程的并发编译请求,确定所述多个工程中各个工程包含的子工程的依赖关系,所述多个工程中至少存在两个目标工程,所述目标工程中存在至少一个子工程与其他目标工程中的子工程存在依赖关系;
第二确定模块,用于根据所述依赖关系确定所述多个工程的所有子工程的编译顺序;
调用模块,用于调用编译器,并使所述编译器根据所述编译顺序对子工程进行编译。
可选地,所述第二确定模块包括:
第一整合单元,用于整合所述多个工程中各个工程包含的子工程的依赖关系,根据整合后的依赖关系确定所述所有子工程的编译顺序;
或者,第二整合单元,用于根据所述依赖关系确定各个工程所包含的子工程的初始编译顺序,整合各个初始编译顺序,得到所述所有子工程的编译顺序。
可选地,所述调用模块具体用于:
调用多个编译器,以对所述子工程进行并发编译;调用的多个编译器的数量与当前时刻待编译的子工程的数量相匹配。
可选地,所述调用模块具体用于:
调用所述编译器的多个进程,以对所述子工程进行并发编译;所述多个进程的数量与当前时刻待编译的子工程的数量相匹配。
可选地,还包括:
第三确定模块,用于在所述编译器生成编译错误而导致编译中断的情况下,确定所述编译错误的类型;
所述第三确定模块还用于在确定所述编译错误的类型包括第一预设类型的情况下,调用提示模块;在确定所述编译错误的类型不包括第一预设类型的情况下,调用所述调用模块;
所述提示模块,用于提示编译错误;
所述调用模块,用于自动对所述工程进行重新编译。
第三方面,提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述的工程编译方法。
第四方面,提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述的工程编译方法。
本发明的积极进步效果在于:本发明实施例中,根据多个工程中各个子工程的依赖关系,确定出所有子工程的编译顺序,进而根据该编译顺序实现对多个工程的并发编译,对于相同的子工程无需重复编译,相互之间无依赖关系的子工程并行编译,从而不仅可以节约编译资源,还可以提高多个工程的编译效率,同时不会因编译顺序错误导致编译报错而中断编译。
本发明的进一步的积极进步效果在于:增加了对每个工程的编译容错处理,自动识别可忽略的出错情景,触发工程重新编译直至编译成功,提高了工程自动编译成功率。
附图说明
图1为本发明一示例性实施例提供的一种工程编译方法的流程图;
图2为本发明一示例性实施例提供的另一种工程编译方法的流程图;
图3为本发明一示例性实施例提供的一种工程编译装置的模块示意图;
图4为本发明一示例实施例示出的一种电子设备的结构示意图。
具体实施方式
下面通过实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实施例范围之中。
图1为本发明一示例性实施例提供的一种工程编译方法的流程图,该工程编译方法应用于服务器,该服务器可以为包含一独立主机的物理服务器,或者该服务器也可以为主机集群承载的虚拟服务器。服务器部署有编译器,该编译器用于对工程进行编译,工程包含至少一个子工程,子工程包括用于实现对应功能的代码。服务器部署的编译器的数量可以是1个也可以是多个。服务器部署的编译器的类型可以根据实际需求自行设置,在编译器的数量为多个的情况下,各个编译器的类型可以相同,也可以不同,编译器可以但不限于采用VC6编译器。
参见图1,该工程编译方法包括以下步骤:
步骤101、响应于针对多个工程的并发编译请求,确定多个工程中各个工程包含的子工程的依赖关系。
开发人员可以根据实际需求从存储于服务器的所有工程中选择全部或者部分工程,对其进行编译。被选择的多个工程中至少存在两个目标工程,该目标工程中存在至少一个子工程与其他目标工程中的子工程相同,也即多个工程中全部或者部分工程存在关联关系,对其进行并发编译可以提高多个工程的编译效率。
开发人员选择多个工程后,生成并发编译请求,以对多个工程进行并发编译。所谓并发编译指的是同时调用多个编译器实例对多个工程进行编译,也即在一个时间段内同时对多个工程进行编译,在一个时刻点上可以同时编译多个子工程。
在一个实施例中,根据工程的配置文件确定各个子工程的依赖关系。开发人员在开发工程时,会对应设置配置文件,该配置文件中记录有工程中各个子工程的上游子工程信息和/或下游子工程信息,该上游子工程信息和/或下游子工程信息表征子工程的依赖关系,根据各个子工程的上游子工程信息和/或下游子工程信息,即可确定各个子工程的依赖关系。
举例来说,假设工程A包含子工程a、子工程b、子工程c以及子工程d,该工程的配置文件中记录了以下信息:子工程b的上游工程是子工程a,子工程b的下游工程是子工程c,子工程c的下游工程是子工程d,可以确定子工程b依赖于子工程a,子工程c依赖于子工程b,子工程d依赖于子工程c。从而,根据工程的配置文件即可确定出每个工程包含的各个子工程的依赖关系,进而确定出所有子工程的依赖关系。
关于上游子工程信息和/或下游子工程信息的提取,可以基于语义识别算法从配置文件中提取上游子工程信息和/或下游子工程信息;也可以从配置文件中提取与预设的字段相匹配的内容,并将所提取的内容确定为上游子工程信息和/或下游子工程信息。预设的字段也即与上游子工程信息和/或下游子工程信息相关的字段。
步骤102、根据依赖关系确定所有子工程的编译顺序。
可以理解地,若一个子工程依赖于另一个子工程,则需要先编译另一个子工程再编译该子工程,该子工程才能顺利被编译,因此可以根据子工程的依赖关系确定出子工程的编译顺序。
还是以上述包含4个子工程的工程A为例,若子工程b依赖于子工程a,子工程c依赖于子工程b,子工程d依赖于子工程c,则工程A中各个子工程的编译顺序表示如下:子工程a→子工程b→子工程c→子工程d,也即编译时依次编译子工程a、子工程b、子工程c以及子工程d。
本发明实施例中,是对多个工程进行并发编译,多个工程中至少存在两个目标工程,目标工程中存在至少一个子工程与其他目标工程中的子工程相同。对于功能部分重叠或者代码部分复用的两个工程,存在相同的子工程,目标工程可以是与其他工程存在功能部分重叠的工程,或者代码部分复用的工程。
举例来说,工程A的中各个子工程的依赖关系为:子工程b依赖于子工程a,子工程c依赖于子工程b,子工程d依赖于子工程c;
工程B的中各个子工程的依赖关系为:子工程b依赖于子工程a,子工程f依赖于子工程b,子工程e依赖于子工程f;
工程C的中各个子工程的依赖关系为:子工程i依赖于子工程a,子工程e依赖于子工程i。
工程A、工程B和工程C均包括子工程a,工程A和工程B还均包括子工程b,则工程A、工程B和工程C为目标工程。
为了实现对多个工程文件的并发编译,需要确定多个工程文件中所有子工程文件的编译顺序,以使编译顺序进行,不会发生冲突。
在一个实施例中,在确定编译顺序时,还确定多个工程中所有子工程的工程分组,以使各工程分组之间编译顺序进行,同一工程分组内的工程编译并发进行,不会发生冲突。所述工程分组是相同外部依赖关系级别的、没有内部依赖关系的工程集合,同一工程分组中的各个工程可以执行并发编译。根据所述工程分组及执行顺序,依次对各工程分组顺序处理,即对每个工程分组内的工程调用多个编译器实例(进程)进行编译。从而可以提高多个工程的编译效率(例如,编译任务分解成两组:子工程组和包含子工程的工程组,先并发编译子工程组,再编译包含子工程的工程组)。
在一个实施例中,在确定所有子工程的编译顺序时,先整合多个工程中各个工程包含的子工程的依赖关系,然后根据整合后的依赖关系确定编译顺序。所谓整合依赖关系,也即将多个工程中重复的依赖关系合并。
举例来说,还是以上述工程A、工程B和工程C为例,对三个工程的依赖关系进行整合之后,得到所有子工程的依赖关系:子工程b和子工程i均依赖于子工程a,子工程c和子工程f均依赖于子工程b,子工程d依赖于子工程c,子工程e依赖于子工程f以及子工程i。
进而根据上述依赖关系,可以确定所有子工程的编译顺序为:子工程a→子工程b、子工程i→子工程c、子工程f→子工程d、子工程e。其中,子工程b和子工程i可以并行编译,子工程c、子工程f可以并行编译,子工程d、子工程e可以并行编译。
或者,根据上述依赖关系,可以确定所有子工程的编译顺序为:子工程a→子工程b→子工程c、子工程f、子工程i→子工程d、子工程e。其中,子工程c、子工程f、子工程i可以并行编译,子工程d、子工程e可以并行编译。
在一个实施例中,在确定所有子工程的编译顺序时,先根据依赖关系确定各个工程所包含的子工程的初始编译顺序,然后整合各个初始编译顺序,得到所有子工程的编译顺序。所谓整合各个初始编译顺序,也即将多个各个初始编译顺序中重复的编译顺序合并。
举例来说,还是以上述工程A、工程B和工程C为例,根据依赖关系可以确定工程A的初始编译顺序:子工程a→子工程b→子工程c→子工程d。根据依赖关系可以确定工程B的初始编译顺序:子工程a→子工程b→子工程f→子工程e。根据依赖关系可以确定工程C的初始编译顺序:子工程a→子工程i→子工程e。
对上述3个初始编译顺序进行整合,得到所有子工程的编译顺序为:子工程a→子工程b、子工程i→子工程c、子工程f→子工程d、子工程e。
或者,根据上述依赖关系,可以确定子工程的编译顺序为:子工程a→子工程b→子工程c、子工程f、子工程i→子工程d、子工程e。
步骤103、调用编译器,并使编译器根据编译顺序对各个子工程进行编译。
在服务器部署的编译器的数量为多个的场景下,对多个工程进行并发编译时,调用多个编译器,以对子工程进行并发编译。其中,调用的编译器的数量与当前时刻待编译的子工程的数量相匹配。
参见图2,以确定出多个工程的所有子工程的编译顺序为:子工程a→子工程b→子工程c、子工程f、子工程i→子工程d、子工程e为例。可以先调用1个编译器,以依次对子工程a、子工程b进行编译,然后调用3个编译器,分别对子工程c、子工程f、子工程i进行并行编译;再调用2个编译器,分别对子工程d、子工程e进行并行编译。从而,基于上述编译顺序即可实现对多个工程的编译,从上述编译顺序可以看出,子工程a和子工程b属于功能重叠(或者代码复用)的子工程,无需重复编译,并且相互无依赖关系的子工程,例如子工程c、子工程f、子工程i,可以并行编译,从而不仅可以节约编译资源,还可以提高多个工程的编译效率,同时不会因编译顺序错误导致编译报错而中断编译。
在服务器部署的编译器的数量为一个的场景下,对多个工程进行并发编译时,调用编译器的多个进程,以对子工程进行并发编译。被调用的多个进程的数量与当前时刻待编译的子工程的数量相匹配。举例来说,当前时刻需要对子工程c、子工程f、子工程i进行编译,则调用3个进程。
工程编译过程中,存在报错情形会导致编译中断。在一个实施例中,若编译器生成编译错误而导致编译中断,参见图2,需要对编译错误进行处理。具体的,先确定编译错误的类型。若编译错误的类型包括第一预设类型,第一预设类型可以根据实际情况自行设置,例如是工程中的代码出现问题和/或工程的配置文件中的配置信息出现错误,该些问题不能忽视,则提示编译错误,以提示开发人员及时对编译错误进行纠正。若编译错误的类型不包括第一预设类型,也即编译错误的原因不属于工程中的代码出现问题和工程的配置文件中的配置信息出现错误,很可能是因为编译器的原因或者并发编译导致的,工程本身没有问题,则触发工程重新编译直至编译成功。从而,通过增加对每个工程的编译容错处理,自动识别可忽略的出错情景,提高了工程自动编译的成功率。
编译错误的类型不包括第一预设类型,此时编译错误很可能是因为编译器的原因或者并发编译导致的,下表示例性的示出了不是第一预设类型的编译错误,由于该些编译错误不能说明工程出现错误,自动对该工程进行重新编译直至编译通过,以避免因该些编译错误导致对并发编译中断,影响编译效率。
Figure BDA0003290735700000091
本发明实施例中,根据多个工程中各个子工程的依赖关系,确定出所有子工程的编译顺序,进而根据该编译顺序实现对多个工程的并发编译,对于相同的子工程无需重复编译,相互之间无依赖关系的子工程并行编译,从而不仅可以节约编译资源,还可以提高多个工程的编译效率,同时不会因编译顺序错误导致编译报错而中断编译。
上述任一实施例提供的工程编译方法不限于通过服务器来执行,还可以通过以下装置来执行:芯片(或者芯片模组)、终端设备等。终端设备可以但不限于包括计算机、平板电脑等。
与前述工程编译方法实施例相对应,本发明还提供了工程编译装置的实施例。
图3是本发明一示例性实施例提供的一种工程编译装置的模块示意图,所述工程编译装置包括:
第一确定模块31,用于响应于针对多个工程的并发编译请求,确定所述多个工程中各个工程包含的子工程的依赖关系,所述多个工程中至少存在两个目标工程,所述目标工程中存在至少一个子工程与其他目标工程中的子工程存在依赖关系;
第二确定模块32,用于根据所述依赖关系确定所述多个工程的所有子工程的编译顺序;
调用模块33,用于调用编译器,并使所述编译器根据所述编译顺序对子工程进行编译。
可选地,所述第二确定模块包括:
第一整合单元,用于整合所述多个工程中各个工程包含的子工程的依赖关系,根据整合后的依赖关系确定所述所有子工程的编译顺序;
或者,第二整合单元,用于根据所述依赖关系确定各个工程所包含的子工程的初始编译顺序,整合各个初始编译顺序,得到所述所有子工程的编译顺序。
可选地,所述调用模块具体用于:
调用多个编译器,以对所述子工程进行并发编译;调用的多个编译器的数量与当前时刻待编译的子工程的数量相匹配。
可选地,所述调用模块具体用于:
调用所述编译器的多个进程,以对所述子工程进行并发编译;所述多个进程的数量与当前时刻待编译的子工程的数量相匹配。
可选地,还包括:
第三确定模块,用于在所述编译器生成编译错误而导致编译中断的情况下,确定所述编译错误的类型;
所述第三确定模块还用于在确定所述编译错误的类型包括第一预设类型的情况下,调用提示模块;在确定所述编译错误的类型不包括第一预设类型的情况下,调用所述调用模块;
所述提示模块,用于提示编译错误;
所述调用模块,用于继续根据所述编译顺序对未编译的子工程进行编译。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述工程编译装置例如可以是:芯片、或者芯片模组、虚拟装置等。
关于上述实施例中描述的各个装置、产品包含的各个模块/单元,其可以是软件模块/单元,也可以是硬件模块/单元,或者也可以部分是软件模块/单元,部分是硬件模块/单元。例如,对于应用于或集成于芯片的各个装置、产品,其包含的各个模块/单元可以都采用电路等硬件的方式实现,或者,至少部分模块/单元可以采用软件程序的方式实现,该软件程序运行于芯片内部集成的处理器,剩余的(如果有)部分模块/单元可以采用电路等硬件方式实现;对于应用于或集成于芯片模组的各个装置、产品,其包含的各个模块/单元可以都采用电路等硬件的方式实现,不同的模块/单元可以位于芯片模组的同一组件(例如芯片、电路模块等)或者不同组件中,或者,至少部分模块/单元可以采用软件程序的方式实现,该软件程序运行于芯片模组内部集成的处理器,剩余的(如果有)部分模块/单元可以采用电路等硬件方式实现;对于应用于或集成于终端的各个装置、产品,其包含的各个模块/单元可以都采用电路等硬件的方式实现,不同的模块/单元可以位于终端内同一组件(例如,芯片、电路模块等)或者不同组件中,或者,至少部分模块/单元可以采用软件程序的方式实现,该软件程序运行于终端内部集成的处理器,剩余的(如果有)部分模块/单元可以采用电路等硬件方式实现。
图4为本发明一示例实施例示出的一种电子设备的结构示意图,示出了适于用来实现本发明实施方式的示例性电子设备40的框图。图4显示的电子设备40仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图4所示,电子设备40可以以通用计算设备的形式表现,例如其可以为服务器设备。电子设备40的组件可以包括但不限于:上述至少一个处理器41、上述至少一个存储器42、连接不同系统组件(包括存储器42和处理器41)的总线43。
总线43包括数据总线、地址总线和控制总线。
存储器42可以包括易失性存储器,例如随机存取存储器(RAM)421和/或高速缓存存储器422,还可以进一步包括只读存储器(ROM)423。
存储器42还可以包括具有一组(至少一个)程序模块424的程序工具425(或实用工具),这样的程序模块424包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
处理器41通过运行存储在存储器42中的计算机程序,从而执行各种功能应用以及数据处理,例如上述任一实施例所提供的方法。
电子设备40也可以与一个或多个外部设备44(例如键盘、指向设备等)通信。这种通信可以通过输入/输出(I/O)接口45进行。并且,模型生成的电子设备40还可以通过网络适配器46与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器46通过总线43与模型生成的电子设备40的其它模块通信。应当明白,尽管图中未示出,可以结合模型生成的电子设备40使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、RAID(磁盘阵列)系统、磁带驱动器以及数据备份存储系统等。
应当注意,尽管在上文详细描述中提及了电子设备的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一实施例所提供的方法。
其中,可读存储介质可以采用的更具体可以包括但不限于:便携式盘、硬盘、随机存取存储器、只读存储器、可擦拭可编程只读存储器、光存储器件、磁存储器件或上述的任意合适的组合。
在可能的实施方式中,本发明实施例还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行实现上述任一实施例的方法。
其中,可以以一种或多种程序设计语言的任意组合来编写用于执行本发明的程序代码,所述程序代码可以完全地在用户设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户设备上部分在远程设备上执行或完全在远程设备上执行。
虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。

Claims (12)

1.一种工程编译方法,其特征在于,所述工程编译方法包括:
响应于针对多个工程的并发编译请求,确定所述多个工程中各个工程包含的子工程的依赖关系,所述多个工程中至少存在两个目标工程,所述目标工程中存在至少一个子工程与其他目标工程中的子工程相同;
根据所述依赖关系确定所述多个工程的所有子工程的编译顺序;
调用编译器,并使所述编译器根据所述编译顺序对子工程进行编译。
2.根据权利要求1所述的工程编译方法,其特征在于,根据所述依赖关系确定所述多个工程的所有子工程的编译顺序,包括:
整合所述多个工程中各个工程包含的子工程的依赖关系,根据整合后的依赖关系确定所述所有子工程的编译顺序;
或者,根据所述依赖关系确定各个工程所包含的子工程的初始编译顺序,整合各个初始编译顺序,得到所述所有子工程的编译顺序。
3.根据权利要求1所述的工程编译方法,其特征在于,调用编译器,包括:
调用多个编译器,以对所述子工程进行并发编译;调用的多个编译器的数量与当前时刻待编译的子工程的数量相匹配。
4.根据权利要求1所述的工程编译方法,其特征在于,调用编译器,包括:
调用所述编译器的多个进程,以对所述子工程进行并发编译;所述多个进程的数量与当前时刻待编译的子工程的数量相匹配。
5.根据权利要求1所述的工程编译方法,其特征在于,还包括:
在所述编译器生成编译错误而导致编译中断的情况下,确定所述编译错误的类型;
若所述编译错误的类型包括第一预设类型,则提示编译错误;
若所述编译错误的类型不包括第一预设类型,自动对所述工程进行重新编译。
6.一种工程编译装置,其特征在于,所述工程编译装置包括:
第一确定模块,用于响应于针对多个工程的并发编译请求,确定所述多个工程中各个工程包含的子工程的依赖关系,所述多个工程中至少存在两个目标工程,所述目标工程中存在至少一个子工程与其他目标工程中的子工程存在依赖关系;
第二确定模块,用于根据所述依赖关系确定所述多个工程的所有子工程的编译顺序;
调用模块,用于调用编译器,并使所述编译器根据所述编译顺序对子工程进行编译。
7.根据权利要求6所述的工程编译装置,其特征在于,所述第二确定模块包括:
第一整合单元,用于整合所述多个工程中各个工程包含的子工程的依赖关系,根据整合后的依赖关系确定所述所有子工程的编译顺序;
或者,第二整合单元,用于根据所述依赖关系确定各个工程所包含的子工程的初始编译顺序,整合各个初始编译顺序,得到所述所有子工程的编译顺序。
8.根据权利要求6所述的工程编译装置,其特征在于,所述调用模块具体用于:
调用多个编译器,以对所述子工程进行并发编译;调用的多个编译器的数量与当前时刻待编译的子工程的数量相匹配。
9.根据权利要求6所述的工程编译装置,其特征在于,所述调用模块具体用于:
调用所述编译器的多个进程,以对所述子工程进行并发编译;所述多个进程的数量与当前时刻待编译的子工程的数量相匹配。
10.根据权利要求6所述的工程编译装置,其特征在于,还包括:
第三确定模块,用于在所述编译器生成编译错误而导致编译中断的情况下,确定所述编译错误的类型;
所述第三确定模块还用于在确定所述编译错误的类型包括第一预设类型的情况下,调用提示模块;在确定所述编译错误的类型不包括第一预设类型的情况下,调用所述调用模块;
所述提示模块,用于提示编译错误;
所述调用模块,用于自动对所述工程进行重新编译。
11.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5中任一项所述的工程编译方法。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5中任一项所述的工程编译方法。
CN202111162658.9A 2021-09-30 2021-09-30 工程编译方法、装置、电子设备、存储介质 Pending CN113986236A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111162658.9A CN113986236A (zh) 2021-09-30 2021-09-30 工程编译方法、装置、电子设备、存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111162658.9A CN113986236A (zh) 2021-09-30 2021-09-30 工程编译方法、装置、电子设备、存储介质

Publications (1)

Publication Number Publication Date
CN113986236A true CN113986236A (zh) 2022-01-28

Family

ID=79737478

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111162658.9A Pending CN113986236A (zh) 2021-09-30 2021-09-30 工程编译方法、装置、电子设备、存储介质

Country Status (1)

Country Link
CN (1) CN113986236A (zh)

Similar Documents

Publication Publication Date Title
CN106371940B (zh) 一种程序崩溃解决方法及装置
US8239823B2 (en) Generating libraries for reflection without project compilation
US20200249925A1 (en) On-demand loading of dynamic scripting language code for reduced memory usage
CN111796831B (zh) 一种多芯片兼容的编译方法和装置
CN101866315B (zh) 软件开发工具的测试方法及系统
CN109032631A (zh) 应用程序补丁包获取方法、装置、计算机设备及存储介质
US20230367568A1 (en) Fast compiling source code without dependencies
CN110737437A (zh) 一种基于代码集成的编译方法和装置
US8458671B1 (en) Method and system for stack back-tracing in computer programs
US9116714B2 (en) Methods and systems for file processing
CN111352631B (zh) 一种接口兼容性检测方法及装置
CN114691188A (zh) 兼容性评估方法、装置、设备及存储介质
US9396239B2 (en) Compiling method, storage medium and compiling apparatus
CN116578282A (zh) 代码生成方法、装置、电子设备及介质
CN113986236A (zh) 工程编译方法、装置、电子设备、存储介质
CN115456628A (zh) 基于区块链的智能合约查看方法、装置、存储介质及设备
CN110737438A (zh) 一种数据处理方法和装置
CN116069650A (zh) 一种测试用例的生成方法及装置
CN113805861B (zh) 基于机器学习的代码生成方法、代码编辑系统及存储介质
CN114237687A (zh) 软件版本的获取方法、系统、电子设备和存储介质
CN110737429A (zh) 一种利用Makefile自身的依赖关系的模块化编译方法和装置
US10671397B2 (en) Reduced save and restore instructions for call-clobbered registers
AU2021297161B2 (en) Fast compiling source code without dependencies
CN115794260B (zh) 一种简单的dsp软件库动态加载方法
CN111273956B (zh) 一种程序模块加载方法、装置、设备及存储介质

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