目标语言的可执行程序的生成方法、装置及设备
文献发布时间:2023-06-19 13:46:35
技术领域
本发明涉及计算机技术领域,尤其涉及一种目标语言的可执行 程序的生成方法、装置及设备。
背景技术
在编写各个应用的代码时,大都是由人工编写代码后再进行调 试,编译生成可执行程序,操作繁琐,然而很多代码只是配置不同, 可使用同样的代码模板。
面对这样的代码,相关技术中,通常采用脚本程序调用代码模 板,读取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配置文件为:
那么,则可以得到生成一个类名为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配置文件为:
那么,则可以得到生成一个类名为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、 磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个 人计算机,服务器,或者网络设备等)执行各个实施例或者实施例 的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案, 而非对其限制;尽管参照前述实施例对本发明进行了详细的说明, 本领域的普通技术人员应当理解:其依然可以对前述各实施例所记 载的技术方案进行修改,或者对其中部分技术特征进行等同替换; 而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实 施例技术方案的精神和范围。
- 目标语言的可执行程序的生成方法、装置及设备
- 用于生成受保护可执行程序的设备、存储介质和方法