CN111596923B - Haxe静态链接库构建方法、装置和电子设备 - Google Patents
Haxe静态链接库构建方法、装置和电子设备 Download PDFInfo
- Publication number
- CN111596923B CN111596923B CN202010438625.1A CN202010438625A CN111596923B CN 111596923 B CN111596923 B CN 111596923B CN 202010438625 A CN202010438625 A CN 202010438625A CN 111596923 B CN111596923 B CN 111596923B
- Authority
- CN
- China
- Prior art keywords
- haxe
- library
- libraries
- file
- compiling
- 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
- 210000000689 upper leg Anatomy 0.000 title claims abstract description 300
- 230000003068 static effect Effects 0.000 title claims abstract description 51
- 238000010276 construction Methods 0.000 title claims abstract description 26
- 238000006243 chemical reaction Methods 0.000 claims abstract description 61
- 238000000034 method Methods 0.000 claims abstract description 24
- 238000004590 computer program Methods 0.000 claims description 5
- 238000004891 communication Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种Haxe静态链接库构建方法、装置和电子设备,涉及Haxe库编译技术领域,方法包括:对Haxe库分组后采用Haxe编译器对第一组Haxe库中的每个Haxe库执行转换步骤,即将每个Haxe库转换成对应的C++语言源代码,得到对应C++编译配置文件和C++文件;并将转换后所需执行的编译配置信息输出至相对应的脚本文件,以在之后的某一时刻编译相对应的C++文件从而生成相对应的静态链接库文件;对第一组Haxe库之后的多组Haxe库中的每个Haxe库执行转换步骤,并完成所有Haxe库相对应的C++文件的编译。本发明能够缩短Haxe静态链接库的构建编译时间,高效利用CPU内核,提高编译效率。
Description
技术领域
本发明涉及Haxe库编译技术领域,尤其是涉及一种Haxe静态链接库构建方法、装置和电子设备。
背景技术
软件开发者使用Haxe进行开发应用程序时,需要使用Haxe编程语言编写一个Haxe主程序的代码和若干个Haxe程序库(以下简称Haxe库)的代码。在完成Haxe库代码编写后,需要将Haxe程序库代码构建成特定目标平台的静态链接库,即开发者首先需要编写hxml格式的工程配置文件(假设此文件名为build.hxml);然后,开发者执行Haxe编译命令“haxebuild.hxml”,随着此编译命令的执行,Haxe编译器会根据上述hxml格式工程配置文件进行构建,最终生成特定目标平台的静态链接库文件。
然而,在执行编译命令进行编译时每个Haxe库需要逐个编译,耗时较长。为了降低编译时长,开发者预先将Haxe库之间的关联关系进行分组后进行编译,但是这种方式只能做到同一个组内并发编译,其他分组的Haxe只能排队等候,CPU内核被闲置,不能充分利用,编译时间仍然较长。
发明内容
本发明的目的在于提供一种Haxe静态链接库构建方法、装置和电子设备,能够缩短Haxe静态链接库的构建编译时间,高效利用CPU内核,提高编译效率。
第一方面,本发明提供的一种Haxe静态链接库构建方法,包括:
对多个编写好的Haxe库进行分组,得到多组Haxe库;其中,每组中的每个Haxe库之间不存在依赖关系;
采用Haxe编译器对第一组Haxe库中的每个Haxe库执行转换步骤,所述转换步骤包括:将每个Haxe库转换成对应的C++语言源代码,得到对应C++编译配置文件和至少一个C++文件;并将每个Haxe库转换成对应的C++语言源代码后所需执行的编译配置信息输出至相对应的脚本文件,以在之后的某一时刻调用所述脚本文件,编译相对应的至少一个C++文件并生成相对应的静态链接库文件;
重复执行上一步骤,将第一组Haxe库之后的多组Haxe库中的每个Haxe库执行转换步骤;并完成所有Haxe库相对应的C++文件的编译,得到每个Haxe库相对应的静态链接库文件。
在可选的实施方式中,在之后的某一时刻编译相对应的至少一个C++文件并生成相对应的静态链接库文件包括:
在当前Haxe库执行转换步骤之后开始调用当前Haxe库对应的脚本文件,以对当前Haxe库对应的所有C++文件进行编译。
在可选的实施方式中,采用Haxe编译器对第一组Haxe库中的每个Haxe库执行转换步骤包括:
采用Haxe编译器对第一组Haxe库中的每个Haxe库并行执行转换步骤。
在可选的实施方式中,所述编译配置信息包括每个Haxe库转换成对应的C++语言源代码后所需执行的编译命令和命令选项值。
在可选的实施方式中,所述脚本文件为bat批处理文件,所述bat批处理文件中包括调用hxcpp编译器信息、C++编译配置文件名称信息和hxcpp编译器参数信息。
在可选的实施方式中,对多个编写好的Haxe库进行分组,得到多组Haxe库包括:
按Haxe库之间的关联关系对多个编写好的Haxe库进行分组,得到组与组之间相关联的多组Haxe库;
将第一组Haxe库之后的多组Haxe库中的每个Haxe库执行转换步骤包括:
按照组与组之间关联关系将第一组Haxe库之后的多组Haxe库中的每个Haxe库执行转换步骤。
第二方面,实施例提供的一种Haxe静态链接库构建装置,包括:
分组模块,用于对多个编写好的Haxe库进行分组,得到多组Haxe库;其中,每组中的每个Haxe库之间不存在依赖关系;
转换及输出模块,用于采用Haxe编译器对第一组Haxe库中的每个Haxe库执行转换步骤,所述转换步骤包括:将每个Haxe库转换成对应的C++语言源代码,得到对应C++编译配置文件和至少一个C++文件;并将每个Haxe库转换成对应的C++语言源代码后所需执行的编译配置信息输出至相对应的脚本文件,以在之后的某一时刻调用所述脚本文件,编译相对应的至少一个C++文件并生成相对应的静态链接库文件;
重复模块,用于重复执行上一步骤,将第一组Haxe库之后的多组Haxe库中的每个Haxe库执行转换步骤;并完成所有Haxe库相对应的C++文件的编译,得到每个Haxe库相对应的静态链接库文件。
在可选的实施方式中,转换及输出模块还用于:
在当前Haxe库执行转换步骤之后开始调用当前Haxe库对应的脚本文件,以对当前Haxe库对应的所有C++文件进行编译。
第三方面,实施例提供一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述前述实施方式任一项所述的方法的步骤。
第四方面,实施例提供一种具有处理器可执行的非易失的程序代码的计算机可读介质,所述程序代码使所述处理器执行所述前述实施方式任一项所述方法。
本发明提供的Haxe静态链接库构建方法、装置和电子设备,在Haxe静态链接库构建的过程中,首先通过Haxe编译器每组Haxe库中的每个Haxe库进行转换得到相对应的C++文件,并将即将执行的hxcpp编译配置信息输出至相对应的脚本文件,然后继续执行下一组Haxe库的每个Haxe库的转换步骤,并在当前步骤或之后的步骤中并行执行上一步骤的C++文件的编译;这样有效降低了Haxe静态链接库的构建编译时间,实现了CPU内核的高效利用。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的Haxe静态链接库构建方法的流程图;
图2为本发明实施例提供的Haxe静态链接库构建方法的原理图;
图3为本发明实施例提供的原有的Haxe静态链接库构建装置的原理图;
图4为本发明实施例提供的电子设备的原理图。
图标:31-分组模块;32-转换及输出模块;33-重复模块;400-电子设备;401-通信接口;402-处理器;403-存储器;404-总线。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以采用各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
下面结合附图,对本发明的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
目前,Haxe是一种开源代码工具包(toolkit),方便用于构建具有跨平台特性的、运行于当前各主流平台(如Windows操作系统、浏览器Web页面、Android操作系统等)的应用程序。Haxe包含了Haxe编程语言、Haxe编译器、Haxe标准库。
软件开发者使用Haxe进行开发应用程序时,需要使用Haxe编程语言编写一个Haxe主程序的代码和若干个Haxe程序库(以下简称Haxe库)的代码。例如,在三维家居设计软件中,除了主程序代码之外,还包括橱柜Haxe库、地砖Haxe库以及家具Haxe库等等。
在完成Haxe库代码编写后,需要将Haxe程序库代码构建成特定目标平台的静态链接库,关于构建的具体操作流程如下:首先,开发者需要编写hxml格式的工程配置文件(假设此文件名为build.hxml);然后,开发者执行Haxe编译命令“haxe build.hxml”,随着此编译命令的执行,Haxe编译器会根据上述hxml格式工程配置文件进行构建,最终生成特定目标平台的静态链接库文件。例如,通过执行Haxe编译生成了橱柜静态链接库、地砖静态链接库以及家具静态链接库等等。
Haxe编译器构建Haxe库的具体实现原理的两个主要关键步骤:首先Haxe编译器本身会将编写好的某个Haxe库的Haxe语言源代码转换成对应的C++语言源代码;然后,Haxe编译器进一步调用hxcpp将上一步得到的C++代码构建成特定平台的静态链接库文件。
前述hxcpp是一个平台无关的用于编译C++代码的“上层编译器”,hxcpp本身不直接提供编译和链接的实现,只是调用特定目标平台的编译工具链(如Windows的MSVC编译工具链、Emscripten编译工具链)来完成对C++代码的编译器选项配置、编译和链接。
如果Haxe应用程序所依赖的Haxe库众多,例如前述三维家居设计软件所涉及到的Haxe库达到78个,那么编译如此众多的Haxe库就需要耗费大量的编译时间。如何减少Haxe库的编译时间,以降低重新编译应用程序带来的成本,就成了软件开发者的需要考虑优化的问题之一。
虽然目前开发者预先将Haxe库之间的关联关系进行分组后进行编译,但是这种方式只能做到同一个组内并发编译,其他分组的Haxe库只能排队等候,CPU内核被闲置,不能充分利用,编译时间仍然较长。
例如,某一时刻,只有一个分组的Haxe库在生成C++代码步骤或hxcpp编译步骤,其他分组只能排队等待,此时有部分的CPU内核被闲置,得不到充分利用。
基于此,本发明提供了一种Haxe静态链接库构建方法、装置和电子设备,能够缩短Haxe静态链接库的构建编译时间,高效利用CPU内核,提高编译效率。
参照图1,本实施例提出的一种Haxe静态链接库构建方法,包括:
S110,对多个编写好的Haxe库进行分组,得到多组Haxe库;其中,每组中的每个Haxe库之间不存在依赖关系。
具体地,对Haxe库进行分组,将不存在依赖关系的若干个Haxe库划分为一组,所有库分成多个组;每个分组内的Haxe库由于不存在依赖关系,所以分组内的所有Haxe库可以同时并发编译。分组后对各组进行排序,以确定编译顺序。
例如,图2中,总共有8个Haxe库,划分为三个分组,其中分组1包括Lib1和Lib2两个Haxe库,分组2包括Lib3、Lib4、Lib5三个Haxe库,分组3包括Lib6、Lib7、Lib8三个Haxe库。
本实施例通过对编写好的Haxe库进行分组,从而能够实现分组并行编译,初步缩短编译时间。
S120,采用Haxe编译器对第一组Haxe库中的每个Haxe库执行转换步骤,转换步骤包括:将每个Haxe库转换成对应的C++语言源代码,得到对应C++编译配置文件和至少一个C++文件;并将每个Haxe库转换成对应的C++语言源代码后所需执行的编译配置信息输出至相对应的脚本文件,以在之后的某一时刻调用脚本文件,编译相对应的至少一个C++文件并生成相对应的静态链接库文件。
具体的,本实施例将原有的构建流程拆分为两个独立的阶段,即转换阶段(即执行转换步骤的阶段):修改Haxe编译器的源代码文件gencpp.ml,在完成Haxe构建流程中的C++代码生成步骤后,将本来要即将执行的编译配置信息(例如,hxcpp编译命令及其命令选项值等详细配置信息)输出到一个脚本文件(如bat批处理文件hxcpp-build.bat)中,然后跳过hxcpp编译阶段,并且立即退出原有的Haxe构建流程,从而把hxcpp编译阶段留到后面某个适当的时刻来进行,调用上述的bat批处理文件来执行hxcpp编译。
步骤S130,重复执行步骤S120,将第一组Haxe库之后的多组Haxe库中的每个Haxe库执行转换步骤;并完成所有Haxe库相对应的C++文件的编译,得到每个Haxe库相对应的静态链接库文件。
具体地,按照编译顺序,采用Haxe编译器对第一组Haxe库相关联的第二组Haxe库中的每个Haxe库执行转换步骤。按照编译顺序,采用Haxe编译器对第二组Haxe库相关联的第三组Haxe库中的每个Haxe库执行转换步骤……以此类推,直至完成所有组的转换步骤。
每一组执行转换步骤之后,得到一个C++编译配置文件、至少一个C++文件和一个脚本文件。根据实际需要,对所有的C++文件依次进行编译。
根据Haxe构建静态库的步骤特点,将每个Haxe库的构建流程分拆成两个独立的阶段(转换阶段和hxcpp编译阶段),这两个阶段可以在不同的时间分别进行,Haxe库在转换阶段后,可以在以后某个时刻才继续进行hxcpp编译。由于hxcpp编译阶段的依赖关系已经被拆解,不存在互相依赖的关系,所以可以做到多个Haxe库分组并发编译。
而本实施例通过将构建过程划分为两个独立的阶段,从而缩短了Haxe静态链接库的构建编译时间,实现了CPU内核的高效利用,提高了编译效率。
可选地,步骤S120包括:
在当前Haxe库执行转换步骤之后开始调用当前Haxe库对应的脚本文件,以对当前Haxe库对应的所有C++文件进行编译。
具体地,在这里C++编译的开始执行时刻,优选的是在执行之后转换步骤的同时进行,例如,参照图2,在完成第一组Haxe库Lib1生成C++步骤之后进行第二组Haxe库Lib2生成C++步骤的同时,立即并行执行第一组Haxe库Lib1 hxcpp编译;此时立即执行C++的编译能够最大程度的缩短编译时间,提高编译效率,提高CPU的利用率。而第二组Lib2完成转换步骤生成C++之后,立即执行hxcpp编译步骤。
当然,可以根据实际需要为C++编译的开始执行时刻设置条件来进行编译。
可选地,步骤S120包括:
采用Haxe编译器对第一组Haxe库中的每个Haxe库并行执行转换步骤。
具体的,如图2所示,分组1的Lib1和Lib2并行执行生成C++的步骤,Lib1之后立即执行Lib1 hxcpp编译,Lib2生成C++之后立即执行Lib2 hxcpp编译;分组2的Lib3、Lib4和Lib5并行执行生成C++的步骤,Lib3之后立即执行Lib3 hxcpp编译,Lib4生成C++之后立即执行Lib4 hxcpp编译,Lib5生成C++之后立即执行Lib5 hxcpp编译;分组3的Lib6、Lib7和Lib8并行执行生成C++的步骤,Lib6之后立即执行Lib6 hxcpp编译,Lib7生成C++之后立即执行Lib7 hxcpp编译,Lib8生成C++之后立即执行Lib8 hxcpp编译。
在本实施例中,执行当前组的Haxe库中每个Haxe库的转换步骤之后立即执行对应的C++文件的编译,可以缩短编译时间。同时,每一组内的Haxe库之间并行执行生成C++的步骤,也可以缩短编译时间。
可选地,上述实施例中的编译配置信息包括每个Haxe库转换成对应的C++语言源代码后所需执行的编译命令和命令选项值。
具体地,在完成Haxe构建流程中的转换阶段后,将本来要即将执行的hxcpp编译命令及其命令选项值等详细配置信息输出到一个bat批处理文件hxcpp-build.bat中。
可选地,上述实施例中的脚本文件为bat批处理文件,bat批处理文件中包括调用hxcpp编译器信息、C++编译配置文件名称信息和hxcpp编译器参数信息。
具体地,上述实施例中的bat批处理文件hxcpp-build.bat的内容,典型的例子是:
haxelib run hxcpp Build.xml-DHXCPP_M64=1。
其中,“haxelib run hxcpp”是调用hxcpp编译器来编译这个hxcpp工程的意思,“Build.xml”是hxcpp工程C++编译配置文件名称,“-DHXCPP_M64=1"是hxcpp编译配置选项(实际情况下的配置选项不止也不限于这一项)。
通过上述手段,就可以把一个Haxe库的构建过程分拆成两个部分:
转换阶段:执行命令haxe build.hxml;
hxcpp编译阶段:执行命令调用hxcpp-build.bat。
可选地,步骤S110包括:
按Haxe库之间的关联关系对多个编写好的Haxe库进行分组,得到组与组之间相关联的多组Haxe库;
步骤S120中的将第一组Haxe库之后的多组Haxe库中的每个Haxe库执行转换步骤包括:
按照组与组之间关联关系将第一组Haxe库之后的多组Haxe库中的每个Haxe库执行转换步骤。
具体地,可以根据Haxe库之间的关联关系并结合实际需要进行分组,即分组之间可能存在关联关系(即依赖关系),即得到组与组之间相关联的多组Haxe库;从而按照关联关系的先后顺序来确定分组的编译顺序。其中,这种关联关系可以通过头文件信息的形式实现;这样在执行转换步骤时,就可以按照这种组与组之间的关联关系进行。
例如,图2中,从互相依赖关系来看,分组3依赖分组2,分组2依赖分组1,这样分组1的两个Haxe库全部都编译完成了,才能开始编译分组2的三个Haxe库,如此类推。
假如有10个Haxe库,形成了一条依赖关系链,第2个Haxe库依赖第1个库,第3个库依赖第2个库,如此类推.所以根据其依赖关系只能分成10个分组,每个分组一个Haxe库,在任何时刻只能有一个Haxe库在编译。假设每个Haxe库用于构建成静态链接库文件的耗时是1分钟,假设每个Haxe库编译时需要占用1个CPU内核线程,那么在1台有16个CPU内核的电脑上,所有这个10个Haxe库的总体编译时间将会是10分钟。本实施例实现了Haxe库能够并发编译,总体耗费时间只需要1分钟,大大降低了总体编译耗时。
综上所述,本实施例修改Haxe编译器,将原有的Haxe库构建过程拆分为独立的两个阶段:在Haxe构建流程中的C++代码生成阶段完成后,将本来要即将执行的hxcpp编译命令及其命令选项值等详细配置信息输出到一个bat批处理文件;本实施例通过同时执行多个Haxe库的含有hxcpp编译命令的bat批处理文件,并发编译多个Haxe库(进入hxcpp编译阶段),并且和还处于生产C++代码阶段的Haxe库同时进行构建;本实施例降低了含有大量Haxe库(需要编译成静态链接库)的大型Haxe应用程序的构建编译时间,在CPU内核数较多的设备(例如电脑)上效果尤为明显。
参照图3,实施例提供的一种Haxe静态链接库构建装置,包括:
分组模块31,用于对多个编写好的Haxe库进行分组,得到多组Haxe库;其中,每组中的每个Haxe库之间不存在依赖关系;
转换及输出模块32,用于采用Haxe编译器对第一组Haxe库中的每个Haxe库执行转换步骤,转换步骤包括:将每个Haxe库转换成对应的C++语言源代码,得到对应C++编译配置文件和至少一个C++文件;并将每个Haxe库转换成对应的C++语言源代码后所需执行的编译配置信息输出至相对应的脚本文件,以在之后的某一时刻调用脚本文件,编译相对应的至少一个C++文件并生成相对应的静态链接库文件;
重复模块33,用于重复执行上一步骤,将第一组Haxe库之后的多组Haxe库中的每个Haxe库执行转换步骤;并完成所有Haxe库相对应的C++文件的编译,得到每个Haxe库相对应的静态链接库文件。
可选地,转换及输出模块32还用于:
在当前Haxe库执行转换步骤之后开始调用当前Haxe库对应的脚本文件,以对当前Haxe库对应的所有C++文件进行编译。
可选地,转换及输出模块32还用于:
采用Haxe编译器对第一组Haxe库中的每个Haxe库并行执行转换步骤。
可选地,编译配置信息包括每个Haxe库转换成对应的C++语言源代码后所需执行的编译命令和命令选项值。
可选地,脚本文件为bat批处理文件,bat批处理文件中包括调用hxcpp编译器信息、C++编译配置文件名称信息和hxcpp编译器参数信息。
可选地,分组模块31用于:
按Haxe库之间的关联关系对多个编写好的Haxe库进行分组,得到组与组之间相关联的多组Haxe库;
重复模块33用于:
按照组与组之间关联关系将第一组Haxe库之后的多组Haxe库中的每个Haxe库执行转换步骤。
参见图4,本发明实施例还提供了一种电子设备400,包括通信接口401、处理器402、存储器403以及总线404,处理器402、通信接口401和存储器403通过总线404连接;上述存储器403用于存储支持处理器402执行上述Haxe静态链接库构建方法的计算机程序,上述处理器402被配置为用于执行该存储器403中存储的程序。
可选地,本发明实施例还提供一种具有处理器可执行的非易失的程序代码的计算机可读介质,程序代码使处理器执行如上述实施例中的Haxe静态链接库构建方法。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (9)
1.一种Haxe静态链接库构建方法,其特征在于,包括:
对多个编写好的Haxe库进行分组,得到多组Haxe库;其中,每组中的每个Haxe库之间不存在依赖关系;
采用Haxe编译器对第一组Haxe库中的每个Haxe库执行转换步骤,所述转换步骤包括:将每个Haxe库转换成对应的C++语言源代码,得到对应C++编译配置文件和至少一个C++文件;并将每个Haxe库转换成对应的C++语言源代码后所需执行的编译配置信息输出至相对应的脚本文件,以在之后的某一时刻调用所述脚本文件,编译相对应的至少一个C++文件并生成相对应的静态链接库文件;
重复执行上一步骤,以将第一组Haxe库之后的多组Haxe库中的每个Haxe库执行转换步骤;并完成所有Haxe库相对应的C++文件的编译,得到每个Haxe库相对应的静态链接库文件;
在之后的某一时刻编译相对应的至少一个C++文件并生成相对应的静态链接库文件包括:在当前Haxe库执行转换步骤之后开始调用当前Haxe库对应的脚本文件,以对当前Haxe库对应的所有C++文件进行编译;
所述Haxe静态链接库构建方法还包括:执行当前组的Haxe库中每个Haxe库的转换步骤之后立即执行对应的C++文件的编译;每一组内的Haxe库之间并行执行生成C++的步骤。
2.根据权利要求1所述的方法,其特征在于,采用Haxe编译器对第一组Haxe库中的每个Haxe库执行转换步骤包括:
采用Haxe编译器对第一组Haxe库中的每个Haxe库并行执行转换步骤。
3.根据权利要求1所述的方法,其特征在于,所述编译配置信息包括每个Haxe库转换成对应的C++语言源代码后所需执行的编译命令和命令选项值。
4.根据权利要求1所述的方法,其特征在于,所述脚本文件为bat批处理文件,所述bat批处理文件中包括调用hxcpp编译器信息、C++编译配置文件名称信息和hxcpp编译器参数信息。
5.根据权利要求1所述的方法,其特征在于,对多个编写好的Haxe库进行分组,得到多组Haxe库包括:
按Haxe库之间的关联关系对多个编写好的Haxe库进行分组,得到组与组之间相关联的多组Haxe库;
将第一组Haxe库之后的多组Haxe库中的每个Haxe库执行转换步骤包括:
按照组与组之间关联关系将第一组Haxe库之后的多组Haxe库中的每个Haxe库执行转换步骤。
6.一种Haxe静态链接库构建装置,其特征在于,包括:
分组模块,用于对多个编写好的Haxe库进行分组,得到多组Haxe库;其中,每组中的每个Haxe库之间不存在依赖关系;
转换及输出模块,用于采用Haxe编译器对第一组Haxe库中的每个Haxe库执行转换步骤,所述转换步骤包括:将每个Haxe库转换成对应的C++语言源代码,得到对应C++编译配置文件和至少一个C++文件;并将每个Haxe库转换成对应的C++语言源代码后所需执行的编译配置信息输出至相对应的脚本文件,以在之后的某一时刻调用所述脚本文件,编译相对应的至少一个C++文件并生成相对应的静态链接库文件;在之后的某一时刻编译相对应的至少一个C++文件并生成相对应的静态链接库文件包括:在当前Haxe库执行转换步骤之后开始调用当前Haxe库对应的脚本文件,以对当前Haxe库对应的所有C++文件进行编译;
重复模块,用于重复执行上一步骤,将第一组Haxe库之后的多组Haxe库中的每个Haxe库执行转换步骤;并完成所有Haxe库相对应的C++文件的编译,得到每个Haxe库相对应的静态链接库文件。
7.根据权利要求6所述的装置,其特征在于,转换及输出模块还用于:
在当前Haxe库执行转换步骤之后开始调用当前Haxe库对应的脚本文件,以对当前Haxe库对应的所有C++文件进行编译。
8.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述权利要求1至5任一项所述的方法的步骤。
9.一种具有处理器可执行的非易失的程序代码的计算机可读介质,其特征在于,所述程序代码使所述处理器执行所述权利要求1至5任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010438625.1A CN111596923B (zh) | 2020-05-21 | 2020-05-21 | Haxe静态链接库构建方法、装置和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010438625.1A CN111596923B (zh) | 2020-05-21 | 2020-05-21 | Haxe静态链接库构建方法、装置和电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111596923A CN111596923A (zh) | 2020-08-28 |
CN111596923B true CN111596923B (zh) | 2024-02-23 |
Family
ID=72189136
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010438625.1A Active CN111596923B (zh) | 2020-05-21 | 2020-05-21 | Haxe静态链接库构建方法、装置和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111596923B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113986239B (zh) * | 2021-10-22 | 2024-09-20 | 烽火通信科技股份有限公司 | 分布式编译方法、装置、设备及可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105308565A (zh) * | 2013-05-31 | 2016-02-03 | 微软技术许可有限责任公司 | 深度并行的源代码编译 |
CN109799991A (zh) * | 2017-11-16 | 2019-05-24 | 中标软件有限公司 | 基于MapReduce框架分布式计算环境的源代码编译方法及系统 |
CN110457044A (zh) * | 2019-07-04 | 2019-11-15 | 广东三维家信息科技有限公司 | Haxe应用程序的编译方法、装置及电子设备 |
-
2020
- 2020-05-21 CN CN202010438625.1A patent/CN111596923B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105308565A (zh) * | 2013-05-31 | 2016-02-03 | 微软技术许可有限责任公司 | 深度并行的源代码编译 |
CN109799991A (zh) * | 2017-11-16 | 2019-05-24 | 中标软件有限公司 | 基于MapReduce框架分布式计算环境的源代码编译方法及系统 |
CN110457044A (zh) * | 2019-07-04 | 2019-11-15 | 广东三维家信息科技有限公司 | Haxe应用程序的编译方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111596923A (zh) | 2020-08-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
US8191042B2 (en) | Continuation based declarative definition and composition | |
US8527971B2 (en) | Parallel program generation method | |
CN101667134B (zh) | 一种构建编译系统的方法及编译系统构建装置 | |
Bozga et al. | Source-to-source architecture transformation for performance optimization in BIP | |
US8701096B2 (en) | In-order execution in an asynchronous programming environment | |
JP4886838B2 (ja) | 並列化方法、システム、及びプログラム | |
US20200319867A1 (en) | Systems and methods for eager software build | |
CN115185539B (zh) | 一种生成可执行动态链接库文件方法、装置及存储介质 | |
CN101859244A (zh) | 多工具链工程构建方法及系统 | |
CN117075909B (zh) | 用于实现并行编程的编译方法、电子设备和介质 | |
CN116069325B (zh) | 前端项目构建方法、装置、设备及计算机可读存储介质 | |
CN109542446A (zh) | 一种编译系统、方法及编译器 | |
Tardieu et al. | Curing schizophrenia by program rewriting in Esterel | |
CN111596923B (zh) | Haxe静态链接库构建方法、装置和电子设备 | |
CN115390809A (zh) | 一种仿真调度方法及系统 | |
CN110333867B (zh) | 一种多方安全计算数据处理方法、装置及系统 | |
CN116185425B (zh) | 基于节点组合的事件流程编排方法、装置、设备及介质 | |
Vepsäläinen et al. | Tool support for the UML automation profile-for domain-specific software development in manufacturing | |
Apostol et al. | UML to code, and code to UML, a view inside implementation challenges and cost | |
CN103488519A (zh) | 一种交互式脚本语言解释器的实现方法 | |
JP2003044543A (ja) | ハードウェア設計を検証するための統合テストケース言語 | |
EP4196874A1 (en) | Representing asynchronous state machine in intermediate code | |
Ukai et al. | Test design as code: JCUnit | |
CN112241268A (zh) | 一种keil工程的编译方法、系统及设备 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |