CN113821195B - 目标语言的可执行程序的生成方法、装置及设备 - Google Patents
目标语言的可执行程序的生成方法、装置及设备 Download PDFInfo
- Publication number
- CN113821195B CN113821195B CN202111064057.4A CN202111064057A CN113821195B CN 113821195 B CN113821195 B CN 113821195B CN 202111064057 A CN202111064057 A CN 202111064057A CN 113821195 B CN113821195 B CN 113821195B
- Authority
- CN
- China
- Prior art keywords
- target language
- program
- rule file
- generating
- language
- 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
- 238000000034 method Methods 0.000 title claims abstract description 42
- 230000006870 function Effects 0.000 claims description 23
- 238000004590 computer program Methods 0.000 claims description 15
- 238000004891 communication Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 238000009434 installation Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 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/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
-
- 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)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种目标语言的可执行程序的动态生成方法,其方法包括:接收输入的目标语言生成命令,调用目标语言所对应的生成规则文件;调用所述生成规则文件中的脚本程序,包括:读取并解析目标语言的代码模板及源语言的配置文件;基于所述源语言的配置文件以及所述目标语言的代码模板,生成基于目标语言的程序代码;获取基于所述生成规则文件所生成的编译规则文件,通过所述编译规则文件,对所述基于目标语言的程序代码进行编译,生成目标语言的可执行程序;其中,所述生成规则文件中的脚本程序为预先编写并存储。该方法解决了批量重复编写代码问题,使得代码可配置,编译自动化;减少人工操作,降低错误率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种目标语言的可执行程序的生成方法、装置及设备。
背景技术
在编写各个应用的代码时,大都是由人工编写代码后再进行调试,编译生成可执行程序,操作繁琐,然而很多代码只是配置不同,可使用同样的代码模板。
面对这样的代码,相关技术中,通常采用脚本程序调用代码模板,读取xml配置文件,最后生成C++代码,由人工进行编译,依然存在着需要人工干涉,浪费开发人员时间,且存在一定的错误率。如何减少错误率,节约开发人员时间问题是目前业界亟待解决的重要课题。
发明内容
针对现有技术存在的问题,本发明提供一种目标语言的可执行程序的生成方法、装置及相关设备。
第一方面,本发明提供一种目标语言的可执行程序的动态生成方法,包括:
接收输入的目标语言生成命令,调用目标语言所对应的生成规则文件;
调用所述生成规则文件中的脚本程序,包括:读取并解析目标语言的代码模板及源语言的配置文件;基于所述源语言的配置文件以及所述目标语言的代码模板,生成基于目标语言的程序代码;获取基于所述生成规则文件所生成的编译规则文件,通过所述编译规则文件,对所述基于目标语言的程序代码进行编译,生成目标语言的可执行程序;其中,所述生成规则文件中的脚本程序为预先编写并存储。
根据本发明提供的一种目标语言的可执行程序的动态生成方法,所述目标语言为C++语言;所述目标语言生成指令为cmake命令;所述目标语言所对应的生成规则文件为CmakeList.txt;所述目标语言的代码模板为C++代码模板,用于描述生成C++代码的类、函数的结构与语法,使用通配符或者预定标记;所述所述源语言的配置文件为XML配置文件,根据代码模板以及实际需要,配置包括类名函数名和返回值的参数;所述编译规则文件为makefile文件,通过所述CMakeList.txt文件生成。
根据本发明提供的一种目标语言的可执行程序的动态生成方法,所述CmakeList.txt通过如下方式编写:在常规目标语言所对应的生成规则文件中添加COMMAND命令行,该COMMAND命令行包括调用的脚本程序的名称。
根据本发明提供的一种目标语言的可执行程序的动态生成方法,所述脚本程序用python或shell语言编写。
根据本发明提供的一种目标语言的可执行程序的动态生成方法,所述获取基于所述生成规则文件所生成的编译规则文件进一步为:获取基于所述生成规则文件和所述基于目标语言的程序代码所生成的编译规则文件。
第二方面,本发明还提供一种目标语言的可执行程序的动态生成装置,包括:接收模块、调用模块、生成代码模块和编译模块。其中,接收模块,用于接收输入的目标语言生成命令,调用目标语言所对应的生成规则文件;调用模块,用于调用所述生成规则文件中的脚本程序,包括:读取并解析目标语言的代码模板及源语言的配置文件;生成代码模块,用于基于所述源语言的配置文件以及所述目标语言的代码模板,生成基于目标语言的程序代码;编译模块,用于获取基于所述生成规则文件所生成的编译规则文件,通过所述编译规则文件,对所述基于目标语言的程序代码进行编译,生成目标语言的可执行程序;其中,所述生成规则文件中的脚本程序为预先编写并存储。
根据本发明提供的一种目标语言的可执行程序的动态生成装置,所述目标语言为C++语言;所述接收模块中的所述目标语言生成指令为cmake命令;所述接收模块中的所述目标语言所对应的生成规则文件为CmakeList.txt;所述调用模块中的所述目标语言的代码模板为C++代码模板,用于描述生成C++代码的类、函数的结构与语法,使用通配符或者预定标记;所述调用模块中的所述所述源语言的配置文件为XML配置文件,根据代码模板以及实际需要,配置包括类名函数名和返回值的参数;所述编译模块中的所述编译规则文件为makefile文件,通过所述CMakeList.txt文件生成。
第三方面,本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述目标语言的可执行程序的动态生成方法的步骤。
第四方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述目标语言的可执行程序的动态生成方法的步骤。
第五方面,本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述目标语言的可执行程序的动态生成方法的步骤。
本发明提供的一种目标语言的可执行程序的生成方法、装置及相关设备,通过接收输入的目标语言生成命令,调用目标语言所对应的生成规则文件,基于生成规则文件调用生成规则文件中的脚本程序,包括:读取并解析目标语言的代码模板及源语言的配置文件,基于源语言的配置文件以及目标语言的代码模板,生成基于目标语言的程序代码,通过获取到的基于生成规则文件所生成的编译规则文件,对基于目标语言的程序代码进行编译,生成目标语言的可执行程序。本发明实施例中的整个过程实现了批量生成可复用的函数和类,也可以自动化批量生成C++代码并完成编译,使得C++代码可配置,编译自动化,减少人工操作,从而降低错误率并节约开发人员时间。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的目标语言的可执行程序的动态生成方法的流程示意图之一;
图2是本发明提供的目标语言的可执行程序的动态生成方法的具体实施例的流程示意图;
图3是本发明提供的目标语言的可执行程序的动态生成装置的结构示意图;
图4是本发明提供的目标语言的可执行程序的动态生成装置中编译模块的结构示意图;
图5是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1描述本发明实施例的目标语言的可执行程序的动态生成方法的各种实施例。
参照图1,图1为本发明提供的目标语言的可执行程序的动态生成方法的流程示意图之一,本发明实施例提供的目标语言的可执行程序的动态生成方法,包括:
步骤S101、接收输入的目标语言生成命令,调用目标语言所对应的生成规则文件;
步骤S103、调用生成规则文件中的脚本程序,包括:读取并解析目标语言的代码模板及源语言的配置文件;
步骤S105、基于源语言的配置文件以及目标语言的代码模板,生成基于目标语言的程序代码;
步骤S107、获取基于生成规则文件所生成的编译规则文件,通过编译规则文件,对基于目标语言的程序代码进行编译,生成目标语言的可执行程序。
本发明实施例提供的目标语言的可执行程序的动态生成方法,通过接收输入的目标语言生成命令,调用目标语言所对应的生成规则文件,基于生成规则文件调用生成规则文件中的脚本程序,包括:读取并解析目标语言的代码模板及源语言的配置文件,基于源语言的配置文件以及目标语言的代码模板,生成基于目标语言的程序代码,通过获取到的基于生成规则文件所生成的编译规则文件,对基于目标语言的程序代码进行编译,生成目标语言的可执行程序。本发明实施例中的整个过程实现了批量生成可复用的函数和类,也可以自动化批量生成C++代码并完成编译,使得C++代码可配置,编译自动化,减少人工操作,从而降低错误率并节约开发人员时间。
下面结合图1对本发明实施例的各个步骤进行解释。
步骤S101、接收输入的目标语言生成命令,调用目标语言所对应的生成规则文件;
具体来说,这里的目标语言若为C++,则所对应的生成规则文件可以为CMakeFile.txt,是cmake的编译规则文件,可以应用输入的目标语言生成命令通过CMakeFile.txt生成相应的makefile(在Unix like系统下)或者project文件(指定用Windows下的相应编程工具编译时)。Cmake是一种开源的跨平台编译工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。若目标语言为其他语言,则所对应的生成规则文件根据实际需要进行调整。
步骤S103、调用生成规则文件中的脚本程序,包括:读取并解析目标语言的代码模板及源语言的配置文件;
具体来说,在编写CMakeList.txt文件时,添加一行COMMAND,则在运行cmake程序时可以调用其中的脚本程序。需要说明的是,调用的生成规则文件中的脚本程序为预先编写并存储。
以一个具体实施例作说明,如:编写CMakeList.txt文件,其中添加一行COMMAND,如:add_custom_target(autoWriteCode ALL COMMAND bash autoWriteCode.sh),则cmake程序执行时调用CMakeFile.txt文件,进而调用脚本程序autoWriteCode.sh,则脚本程序autoWriteCode.sh可以被执行。
步骤S105、基于源语言的配置文件以及目标语言的代码模板,生成基于目标语言的程序代码;
具体来说,配置文件为保存软件设置的文件。源语言的配置文件可以为XML文件,也可以为其他配置文件或自定义配置文件,如:JSON文件、protobuf文件等,目标语言若为C++,则目标语言的代码模板为C++代码模板,基于目标语言的程序代码为C++代码。
步骤S107、获取基于生成规则文件所生成的编译规则文件,通过编译规则文件,对基于目标语言的程序代码进行编译,生成目标语言的可执行程序。
具体来说,编译规则文件为编译基于目标语言的程序代码的规则文件,通过make程序可以生成目标语言的可执行程序。
在一个可选实施例中,本发明实施例的目标语言为C++语言;步骤S101中的目标语言生成指令为cmake命令;步骤S101中的目标语言所对应的生成规则文件为CmakeList.txt;步骤S103和步骤S105中的目标语言的代码模板为C++代码模板,用于描述生成C++代码的类、函数的结构与语法,使用通配符或者预定标记;步骤S103和步骤S105中的源语言的配置文件为XML配置文件,根据代码模板以及实际需要,配置包括类名函数名和返回值的参数;步骤S107中的编译规则文件为makefile文件,通过CMakeList.txt文件生成。
具体来说,若目标语言为C++语言,则接收用户输入在命令行的cmake命令,执行cmake程序时则可以调用目标语言所对应的生成规则文件CmakeList.txt,进而基于CmakeList.txt文件调用脚本程序,读取C++代码模板与XML配置文件,根据配置文件的参数与模板组合,生成对应的C++代码。通过make命令调用基于CmakeList.txt文件生成的makefile文件对C++代码进行编译,得到可执行程序。
需要说明的是,根据实际需要,脚本程序可以读取不同的模板文件,生成不同的代码。C++代码模板用来描述生成C++代码的类、函数的结构与语法,其中类名函数名以及参数,均使用通配符或者特殊标记;这样脚本程序读取到这些特殊标记后,使用XML文件(XML文件是根据代码模板以及实际需要,配置不同的参数。比如:类名函数名,返回值等)的配置来替换,最终生成C++代码,
以一个具体实施例作说明,若C++模板代码为:
int${CLASSNAME}::${FUNCTION}(const string&strVal)
XML配置文件为:
<group name="JingPad">
<entry key="showMessage"type="string">
<default>JingLing is great!!</default>
那么,则可以得到生成一个类名为JingPad,函数名为showMessage,参数为JingLing is great的代码。
在一个具体实施例中,CmakeList.txt通过如下方式编写:
在常规目标语言所对应的生成规则文件中添加COMMAND命令行,该COMMAND命令行包括调用的脚本程序的名称。
具体来说,该COMMAND命令行包括调用的脚本程序的名称,即可调用脚本程序,脚本程序即可被执行,进而生成代码。
在一个可选实施例中,脚本程序用python或shell语言编写。
在一个具体实施例中,步骤S107中获取基于所述生成规则文件所生成的编译规则文件进一步为:获取基于生成规则文件和基于目标语言的程序代码所生成的编译规则文件。
具体来说,由于Makefile文件为编译C++代码的规则文件,即Makefile文件内定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,基于生成规则文件和C++代码生成的Makefile文件可以更好地编译该C++代码,生成对应的可执行程序。
在一个具体实施例中,参照图2,图2为本发明提供的目标语言的可执行程序的动态生成方法的具体实施例的流程示意图,目标语言为C++语言,则接收用户输入在命令行的cmake命令,执行cmake程序时则可以调用目标语言所对应的生成规则文件CmakeList.txt,进而基于CmakeList.txt文件调用脚本程序,读取C++代码模板与XML配置文件,根据配置文件的参数与模板组合,生成对应的C++代码。通过make命令调用基于CmakeList.txt文件和C++代码生成的makefile文件对C++代码进行编译,得到可执行程序。
如前所述,均以C++采用Cmake进行了举例说明,这仅是示意性的,并不对本发明的实施例构成特别限定。
其它的类似方式,例如Xmake、premake、Meson、Ninja等均可适用于本发明。
下面对本发明提供的目标语言的可执行程序的动态生成装置进行描述,下文描述的目标语言的可执行程序的动态生成装置与上文描述的目标语言的可执行程序的动态生成方法可相互对应参照。
参照图3,图3为本发明提供的目标语言的可执行程序的动态生成装置的结构示意图,本发明实施例还提供了一种目标语言的可执行程序的动态生成装置,包括:接收模块31、调用模块33、生成代码模块35、编译模块37。其中,接收模块31,用于接收输入的目标语言生成命令,调用目标语言所对应的生成规则文件;调用模块33,用于调用所述生成规则文件中的脚本程序,包括:读取并解析目标语言的代码模板及源语言的配置文件;生成代码模块35,用于基于所述源语言的配置文件以及所述目标语言的代码模板,生成基于目标语言的程序代码;编译模块37,用于获取基于所述生成规则文件所生成的编译规则文件,通过所述编译规则文件,对所述基于目标语言的程序代码进行编译,生成目标语言的可执行程序。
本发明实施例提供的目标语言的可执行程序的动态生成装置,通过接收模块31接收输入的目标语言生成命令,调用模块33调用目标语言所对应的生成规则文件,基于生成规则文件调用生成规则文件中的脚本程序,包括:读取并解析目标语言的代码模板及源语言的配置文件,基于源语言的配置文件以及目标语言的代码模板,通过生成代码模块35生成基于目标语言的程序代码,通过编译模块37获取基于生成规则文件所生成的编译规则文件,对基于目标语言的程序代码进行编译,生成目标语言的可执行程序。本发明实施例中的整个过程实现了批量生成可复用的函数和类,也可以自动化批量生成C++代码并完成编译,使得C++代码可配置,编译自动化,减少人工操作,从而降低错误率并节约开发人员时间。
下面结合图3对本发明实施例的各个模块进行解释。
具体来说,接收模块31中的目标语言若为C++,则所对应的生成规则文件可以为CMakeFile.txt,是cmake的编译规则文件,可以应用输入的目标语言生成命令通过CMakeFile.txt生成相应的makefile(在Unix like系统下)或者project文件(指定用Windows下的相应编程工具编译时)。Cmake是一种开源的跨平台编译工具,可以用简单的语句来描述所有平台的安装(编译过程)。能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。若目标语言为其他语言,则所对应的生成规则文件根据实际需要进行调整。
具体来说,在编写CMakeList.txt文件时,添加一行COMMAND,则在运行cmake程序时调用模块33可以调用其中的脚本文件。需要说明的是,调用的生成规则文件中的脚本程序为预先编写并存储。
以一个具体实施例作说明,如:编写CMakeList.txt文件,其中添加一行COMMAND,如:add_custom_target(autoWriteCode ALL COMMAND bash autoWriteCode.sh),则cmake程序执行时调用CMakeFile.txt文件,进而调用脚本程序autoWriteCode.sh,则脚本程序autoWriteCode.sh可以被执行。
具体来说,生成代码模块35中源语言的配置文件可以为xml文件,也可以为其他配置文件或自定义配置文件,如:JSON文件、protobuf文件等,目标语言若为C++,则目标语言的代码模板为C++代码模板,基于目标语言的程序代码为C++代码。
具体来说,编译模块37中的编译规则文件为编译基于目标语言的程序代码的规则文件,通过make程序可以生成目标语言的可执行程序。
在一个可选实施例中,本发明实施例的目标语言为C++语言;步骤S101中的目标语言生成指令为cmake命令;接收模块31中的目标语言所对应的生成规则文件为CmakeList.txt;调用模块33和生成代码模块35中的目标语言的代码模板为C++代码模板,用于描述生成C++代码的类、函数的结构与语法,使用通配符或者预定标记;调用模块33和生成代码模块35中的源语言的配置文件为XML配置文件,根据代码模板以及实际需要,配置包括类名函数名和返回值的参数;编译模块37中的编译规则文件为makefile文件,通过CMakeList.txt文件生成。
具体来说,若目标语言为C++语言,则接收模块31接收用户输入在命令行的cmake命令,执行cmake程序时则可以调用目标语言所对应的生成规则文件CmakeList.txt,进而基于CmakeList.txt文件调用模块33可以调用脚本程序,读取C++代码模板与XML配置文件,生成代码模块35根据配置文件的参数与模板组合,生成对应的C++代码。编译模块37通过make命令调用基于CmakeList.txt文件生成的makefile文件对C++代码进行编译,得到可执行程序。
需要说明的是,根据实际需要,脚本程序可以读取不同的模板文件,生成不同的代码。C++代码模板用来描述生成C++代码的类、函数的结构与语法,其中类名函数名以及参数,均使用通配符或者特殊标记;这样脚本程序读取到这些特殊标记后,使用XML文件(XML文件是根据代码模板以及实际需要,配置不同的参数。比如:类名函数名,返回值等)的配置来替换,最终生成C++代码,
以一个具体实施例作说明,若C++模板代码为:
int${CLASSNAME}::${FUNCTION}(const string&strVal)
XML配置文件为:
<group name="JingPad">
<entry key="showMessage"type="string">
<default>JingLing is great!!</default>
那么,则可以得到生成一个类名为JingPad,函数名为showMessage,参数为JingLing is great的代码。
在一个具体实施例中,接收模块31前还包括编写模块30,用于编写接收模块31中的CmakeList.txt,具体包括:
添加单元301,用于在常规目标语言所对应的生成规则文件中添加COMMAND命令行,该COMMAND命令行包括调用的脚本程序的名称。
具体来说,该COMMAND命令行包括调用的脚本程序的名称,即可调用脚本程序,脚本程序即可被执行,进而生成代码。
在一个可选实施例中,调用模块33中调用的脚本程序用python或shell语言编写。
在一个具体实施例中,参照图4,图4为本发明提供的目标语言的可执行程序的动态生成装置中编译模块的结构示意图,编译模块37进一步包括:
获取单元371,用于获取基于生成规则文件和基于目标语言的程序代码所生成的编译规则文件;
编译单元372,用于通过所述编译规则文件,对所述基于目标语言的程序代码进行编译,生成目标语言的可执行程序。
具体来说,由于Makefile文件为编译C++代码的规则文件,即Makefile文件内定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,基于生成规则文件和C++代码生成的Makefile文件可以更好地编译该C++代码,生成对应的可执行程序。
图5示例了一种电子设备的实体结构示意图,如图5所示,该电子设备可以包括:处理器(processor)510、通信接口(Communications Interface)520、存储器(memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的逻辑指令,以执行目标语言的可执行程序的动态生成方法。
此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的目标语言的可执行程序的动态生成方法。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的目标语言的可执行程序的动态生成方法。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (8)
1.一种目标语言的可执行程序的动态生成方法,其特征在于,包括:
接收输入的目标语言生成命令,调用目标语言所对应的生成规则文件;
调用所述生成规则文件中的脚本程序,包括:
读取并解析目标语言的代码模板及源语言的配置文件;
基于所述源语言的配置文件以及所述目标语言的代码模板,生成基于目标语言的程序代码;
获取基于所述生成规则文件所生成的编译规则文件,通过所述编译规则文件,对所述基于目标语言的程序代码进行编译,生成目标语言的可执行程序;其中,所述生成规则文件中的脚本程序为预先编写并存储;
所述目标语言为C++语言;
所述目标语言生成指令为cmake命令;
所述目标语言所对应的生成规则文件为CmakeList.txt;
所述目标语言的代码模板为C++代码模板,用于描述生成C++代码的类、函数的结构与语法,使用通配符或者预定标记;
所述源语言的配置文件为XML配置文件,根据代码模板以及实际需要,配置包括类名函数名和返回值的参数;
所述编译规则文件为makefile文件,通过所述CmakeList.txt文件生成。
2.根据权利要求1所述的目标语言的可执行程序的动态生成方法,其特征在于,
所述CmakeList.txt通过如下方式编写:
在常规目标语言所对应的生成规则文件中添加COMMAND命令行,该COMMAND命令行包括调用的脚本程序的名称。
3.根据权利要求2所述的目标语言的可执行程序的动态生成方法,其特征在于,所述脚本程序用python或shell语言编写。
4.根据权利要求3所述的目标语言的可执行程序的动态生成方法,其特征在于,所述获取基于所述生成规则文件所生成的编译规则文件进一步为:
获取基于所述生成规则文件和所述基于目标语言的程序代码所生成的编译规则文件。
5.一种目标语言的可执行程序的动态生成装置,其特征在于,包括:
接收模块,用于接收输入的目标语言生成命令,调用目标语言所对应的生成规则文件;
调用模块,用于调用所述生成规则文件中的脚本程序,包括:读取并解析目标语言的代码模板及源语言的配置文件;
生成代码模块,用于基于所述源语言的配置文件以及所述目标语言的代码模板,生成基于目标语言的程序代码;
编译模块,用于获取基于所述生成规则文件所生成的编译规则文件,通过所述编译规则文件,对所述基于目标语言的程序代码进行编译,生成目标语言的可执行程序;其中,所述生成规则文件中的脚本程序为预先编写并存储;
所述目标语言为C++语言;
所述接收模块中的所述目标语言生成指令为cmake命令;
所述接收模块中的所述目标语言所对应的生成规则文件为CmakeList.txt;
所述调用模块中的所述目标语言的代码模板为C++代码模板,用于描述生成C++代码的类、函数的结构与语法,使用通配符或者预定标记;
所述调用模块中的所述所述源语言的配置文件为XML配置文件,根据代码模板以及实际需要,配置包括类名函数名和返回值的参数;
所述编译模块中的所述编译规则文件为makefile文件,通过所述CmakeList.txt文件生成。
6.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至4任一项所述目标语言的可执行程序的动态生成方法的步骤。
7.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至4任一项所述目标语言的可执行程序的动态生成方法的步骤。
8.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至4任一项所述目标语言的可执行程序的动态生成方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111064057.4A CN113821195B (zh) | 2021-09-10 | 2021-09-10 | 目标语言的可执行程序的生成方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111064057.4A CN113821195B (zh) | 2021-09-10 | 2021-09-10 | 目标语言的可执行程序的生成方法、装置及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113821195A CN113821195A (zh) | 2021-12-21 |
CN113821195B true CN113821195B (zh) | 2023-12-22 |
Family
ID=78921947
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111064057.4A Active CN113821195B (zh) | 2021-09-10 | 2021-09-10 | 目标语言的可执行程序的生成方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113821195B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117075912B (zh) * | 2023-10-16 | 2023-12-26 | 芯行纪科技有限公司 | 用于程序语言转换的方法、编译方法及相关设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112667287A (zh) * | 2020-12-28 | 2021-04-16 | 深圳前海微众银行股份有限公司 | 规则文件的创建方法、装置、设备及计算机可读存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9086931B2 (en) * | 2002-11-20 | 2015-07-21 | Purenative Software Corporation | System for translating diverse programming languages |
US20060271920A1 (en) * | 2005-05-24 | 2006-11-30 | Wael Abouelsaadat | Multilingual compiler system and method |
US9886249B2 (en) * | 2015-11-16 | 2018-02-06 | Sap Se | Universal transcompiling framework |
-
2021
- 2021-09-10 CN CN202111064057.4A patent/CN113821195B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112667287A (zh) * | 2020-12-28 | 2021-04-16 | 深圳前海微众银行股份有限公司 | 规则文件的创建方法、装置、设备及计算机可读存储介质 |
Non-Patent Citations (3)
Title |
---|
丰恒谷.大型项目高效组织代码编译工具CMake."blog.csdn.net./selfi_xiaowen/article/details/118277893".2021,第1-2页. * |
周睿 ; .基于Clang编译器的程序结构分析器设计.计算机时代.2016,(第10期),全文. * |
郭小强 ; 赵刚 ; 黄昆 ; .基于MATLAB/Simulink平台下TI C2000 DSP代码的自动生成.科学技术与工程.2011,(第13期),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN113821195A (zh) | 2021-12-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8813027B2 (en) | Static type checking against external data sources | |
CN111399853A (zh) | 机器学习模型与自定义算子的模板化部署方法 | |
US20110126179A1 (en) | Method and System for Dynamic Patching Software Using Source Code | |
CN111427583A (zh) | 组件的编译方法、装置和电子设备及计算机可读存储介质 | |
US20160246622A1 (en) | Method and system for implementing invocation stubs for the application programming interfaces embedding with function overload resolution for dynamic computer programming languages | |
US11429372B2 (en) | Application program updating method, apparatus, system, medium and device | |
US20140068364A1 (en) | Modified condition/decision coverage test case automation | |
CN111382055B (zh) | 一种基于统一描述语言的自动化单元测试方法及装置 | |
CN113821195B (zh) | 目标语言的可执行程序的生成方法、装置及设备 | |
US20100083238A1 (en) | Binary manipulation of intermediate-language code | |
CN114064003A (zh) | 小程序生成方法、装置、设备及存储介质 | |
US8881126B2 (en) | Systems and methods for testing a compiler through compile-time decision feedback | |
CN115729560B (zh) | 程序代码处理方法及装置 | |
CN116360887A (zh) | 一种程序参数加载方法、装置、设备及存储介质 | |
CN117113080A (zh) | 数据处理和代码处理方法、装置、一体机和存储介质 | |
CN111399842A (zh) | 一种代码编译方法及装置 | |
US20210271762A1 (en) | Method and device for symbolic analysis of a software program | |
CN115098158A (zh) | Sdk打包方法和装置、计算机设备及存储介质 | |
CN113448874A (zh) | 一种单元测试脚本的生成方法及装置 | |
CN113961238A (zh) | 对象转换方法、装置及电子设备和存储介质 | |
CN108241573B (zh) | 一种集成测试代码生成方法及装置 | |
KR101731629B1 (ko) | Circus로부터 go 코드를 자동으로 생성하는 방법 및 장치 | |
CN113946338B (zh) | 基于rinsim仿真平台的c语言编译方法及装置 | |
CN113342344B (zh) | Flutter编译流程介入方法及装置 | |
CN111061467B (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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220402 Address after: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing. Applicant after: BEIJING BYTEDANCE NETWORK TECHNOLOGY Co.,Ltd. Address before: 2005, floor 2, No. 39, West Street, Haidian District, Beijing 100082 Applicant before: Beijing jingling Information System Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |