一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

编译配置文件的自动生成方法、装置、电子设备及存储介质与流程

2022-12-06 22:50:30 来源:中国专利 TAG:


1.本发明涉及数据处理技术领域,特别是涉及一种编译配置文件的自动生成方法、装置、电子设备及存储介质。


背景技术:

2.cmake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。通过cmake工具软件可以输出各种各样的makefile或者project文件。一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,而makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个shell脚本一样,也可以执行操作系统的命令。
3.对于一个庞大的软件工程而言,编写makefile十分复杂。目前,通常通过cmake工具软件读入所有源文件,并根据配置文件cmakelists.txt自动生成makefile。但是现有技术中,采用cmake工具软件生成makefile文件具有如下的不足之处:
4.由于cmake作为第三方工具软件,需要下载安装,在脱离网络的电脑上安装相当不便。
5.同时cmake工具软件中,需要软件工程的每个目录中都设置一个配置文件“cmakelists.txt”,从而使得配置文件数量较多,如果需要更新编译文件列表,则需要人工维护诸多配置文件,工作量非常大。


技术实现要素:

6.本发明所要解决的技术问题在于,提供一种编译配置文件的自动生成方法、装置、电子设备及存储介质。可以高效且低成本地自动生成编译配置文件。
7.为解决上述技术问题,作为本发明的一方面,提供一种编译配置文件的自动生成方法,其至少包括如下步骤:
8.将软件工程中待编译文件和编译规则分离,生成仅包括编译规则的第一编译配置文件,所述编译规则至少包括待编译文件的编译顺序、链接规则以及需要生成的可执行文件的格式;
9.利用预先编写的编译配置文件自动生成工具,搜索软件工程所在目录树下的待编译文件;将搜索到的待编译文件和对应的目录分别以文件列表和目录列表的形式保存在自动生成的第二编译配置文件中,其中,第二编译配置文件通过文件包含指令包含在第一编译配置文件中。
10.其中,所述将软件工程中待编译文件和编译规则分离,生成仅包括编译规则的第一编译配置文件的步骤进一步包括:
11.将第二编译配置文件通过文件包含指令加载到一个文件变量上;
12.根据所述文件变量获得待编译文件的依赖关系,并确定待编译文件的编译顺序、
链接规则以及需要生成的可执行文件的格式。
13.其中,所述利用预先编写的编译配置文件自动生成工具,搜索软件工程所在目录树下的待编译文件的步骤进一步包括:
14.根据所述预先编写的编译配置文件自动生成工具,确定需要过滤的文件列表和目录列表;
15.搜索软件工程所在目录树下所有的文件和目录,根据需要过滤的文件列表和目录列表,排除其中需要过滤的文件和目录,获得待编译文件以及对应的目录;
16.对所述待编译文件以及对应的目录的名称进行格式化处理;
17.将名称经过格式化后的待编译文件和对应的目录分别以文件列表和目标列表的形式写入自动生成的第二编译配置文件中。
18.其中,所述预先编写的编译配置文件自动生成工具为自动执行脚本文件,其中至少定义有需要过滤的文件列表和目录列表。
19.其中,其特征在于,进一步包括:
20.执行编译处理命令,对所述第一编译配置文件文件进行编译处理,生成所述第一编译配置文件所确定的格式的可执行文件。
21.作为本发明的另一方面,还提供一种编译配置文件的自动生成装置,其至少包括:
22.第一编译配置文件生成单元,用于将软件工程中待编译文件和编译规则分离,生成仅包括编译规则的第一编译配置文件,所述编译规则至少包括待编译文件的编译顺序、链接规则以及需要生成的可执行文件的格式;
23.第二编译配置文件自动生成单元,用于利用预先编写的编译配置文件自动生成工具,搜索软件工程所在目录树下的待编译文件;将搜索到的待编译文件和对应的目录分别以文件列表和目录列表的形式保存在自动生成的第二编译配置文件中,其中,第二编译配置文件通过文件包含指令包含在第一编译配置文件中。
24.其中,所述第一编译配置文件生成单元进一步包括:
25.文件变量加载单元,用于将第二编译配置文件通过文件包含指令加载到一个文件变量上;
26.编译规则确定单元,用于根据所述文件变量获得待编译文件的依赖关系,并确定待编译文件的编译顺序、链接规则以及需要生成的可执行文件的格式。
27.其中,所述第二编译配置文件自动生成单元进一步包括:
28.过滤内容确定单元,用于根据所述预先编写的编译配置文件自动生成工具,确定需要过滤的文件目录列表和目录列表;
29.过滤处理单元,用于搜索软件工程所在目录树下所有的文件和目录,根据需要过滤的文件列表和目录列表,排除其中需要过滤的文件和目录,获得待编译文件以及对应的目录;
30.格式化处理单元,用于对所述待编译文件以及对应的目录的名称进行格式化处理;
31.第二编译配置文件形成单元,用于将名称经过格式化后的待编译文件和对应的目录分别以文件列表和目录列表的形式写入自动生成的第二编译配置文件中。
32.其中,进一步包括:
33.编译处理单元,用于执行编译处理命令,对所述第一编译配置文件文件进行编译处理,生成所述第一编译配置文件所确定的格式的可执行文件。
34.其中,所述预先编写的编译配置文件自动生成工具为自动执行脚本文件,其中至少定义有需要过滤的文件目录列表和目录列表。
35.相应地,本发明的再一方面,还提供一种电子设备,包括存储器和处理器,所述存储器和所述处理之间互相通信连接,所述存储器存储有计算机指令,其特征在于,所述处理器通过执行所述计算机指令,从而执行如前述的编译配置文件的自动生成方法。
36.相应地,本发明的又一方面,还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使计算机执行如前述的编译配置文件的自动生成方法。
37.实施本发明实施例,具有如下的有益效果:
38.本发明提供一种编译配置文件的自动生成方法、装置、电子设备及存储介质,通过将makefile内的编译规则与待编译文件分离,生成仅包括编译规则的第一编译配置文件,并采用预先编写的编译配置文件自动生成工具,自动生成第二编译配置文件,同时采用文件包含指令将第一编译配置文件和第二编译配置文件关联起来,可以替代现有技术中通过cmake工具软件生成makefile的方案。
39.利用本发明所提供的方法,在软件工程开发过程中,当需要增删文件时,只需要调整编译配置文件自动生成工具中所定义的需要过滤的文件列表和目录列表,即可以很方便地再次自动生成软件工程所需的新的第二编译配置文件,免去了人为对诸多编译配置文件的修改,减少了人为出错概率,并提高了软件更新的效率。
附图说明
40.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,根据这些附图获得其他的附图仍属于本发明的范畴。
41.图1为本发明提供的一种编译配置文件的自动生成方法的一个实施例的主流程示意图;
42.图2为本发明提供的一种编译配置文件的自动生成装置的一个实施例的结构示意图;
43.图3为图2中编译规则文件生成单元的结构示意图;
44.图4为图2的编译配置文件自动生成单元的结构示意图;
45.图5为本技术实施例公开的一种电子设备的结构图;
46.图6为本技术实施例公开的另一种电子设备的结构图。
具体实施方式
47.为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。
48.如图1所示,示出了本发明提供的一种编译配置文件的自动生成方法的一个实施
例的主流程示意图;在本实施例中,所述方法包括如下步骤:
49.步骤s10,将软件工程中待编译文件和编译规则分离,生成仅包括编译规则的第一编译配置文件(makefile文件),所述编译规则至少包括待编译文件的编译顺序、链接规则以及需要生成的可执行文件的格式;
50.其中,所述步骤s10进一步包括:
51.将第二编译配置文件(.mk文件)通过文件包含指令加载到一个文件变量上;
52.根据所述文件变量获得待编译文件的依赖关系,并确定待编译文件的编译顺序、链接规则以及需要生成的可执行文件的格式。
53.可以理解的是,makefile文件用于描述整个软件工程所有文件的编译顺序、编译规则。其中定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译。
54.在现有技术中的配置文件中,常常把需要编译的文件直接与编译规则写在一起,即在makefile文件中同时包含需要编译的文件与编译规则;下面示出了现有的一种配置文件的代码示例:
55.all:start.o vectors_m.o interrupts_m.o crt0.o main.o board_f.o uart.o//编译所需要的文件列表
56.$(link)$^$(libs)$(linkflags)-o$@$(lds)//编译、链接规则
57.$(objcopy)-o binary-r.note.gnu.build-id$@.elf$@.bin//生成二进制bin文件
58.而在本发明提供的方法中,对原有配置文件加以改进,采用一个仅包括编译规则的第一编译配置文件(makefile文件)。具体地,创建“c_file”变量,把需要编译的文件列表写到一个.mk文件中,通过文件包含指令(include)把文件列表加载到c_file变量上。目标all的依赖写成变量“cobjfile”,而cobjfile变量值是通过“c_file”变量来获取,从而把文件列表分离到一个.mk文件中。具体的代码示例如下:
[0059][0060]
步骤s11,利用预先编写的编译配置文件自动生成工具,搜索软件工程所在目录树下的待编译文件;将搜索到的待编译文件和对应的目录分别以文件列表和目录列表的形式保存在自动生成的第二编译配置文件(.mk文件)中,其中,第二编译配置文件通过文件包含指令包含在第一编译配置文件(makefile文件)中。
[0061]
可以理解的是,本实施例中,所述预先编写的编译配置文件自动生成工具为一个自动执行脚本文件,可以自动生成包含待编译文件列表的第二编译配置文件(mk文件),其可以使用任何语言开发(如,c、c 、java、ruby、python语言等),其中至少定义有需要过滤的文件列表和目录列表。
[0062]
其中,所述步骤s11进一步包括:
[0063]
根据所述预先编写的编译配置文件自动生成工具,确定需要过滤的文件列表和目
录列表;
[0064]
搜索软件工程所在目录树下所有的文件和目录,根据需要过滤的文件列表和目录列表,排除其中需要过滤的文件和目录,获得待编译文件以及对应的目录;
[0065]
对所述待编译文件以及对应的目录的名称进行格式化处理;
[0066]
将名称经过格式化后的待编译文件和对应的目录分别以文件列表和目录列表的形式写入自动生成的第二编译配置文件(.mk文件)中。
[0067]
下述为一个实施例中,采用python语言编写的编译配置文件自动生成工具的代码示例:
[0068]
[0069][0070]
运行工具后得到的第二mk文件的代码示例如下:
[0071]
c_file =$(root)/uart.c\#c文件列表集合
[0072]
$(root)/start.c\
[0073]
$(root)/crt0.c\
[0074]
$(root)/vectors_m.c\
[0075]
$(root)/interrupts_m.c\
[0076]
$(root)/vsprintf.c\
[0077]
$(root)/board_f.c\
[0078]
$(root)/main.c\
[0079]
includes =#目录列表集合,当前示例没有二级目录,所以为空
[0080]
可以理解的是,所述编译配置文件自动生成工具为一次性开发,开发完成后,后续项目的文件有变动后,只需调整所述自动生成工具中的需要过滤的文件列表和目录列表,然后再次运行工具即可以重新生成新的第二编译配置文件。
[0081]
在接下的步骤中,执行编译处理命令,对所述第一编译配置文件文件进行编译处理,生成所述第一编译配置文件所确定的格式的可执行文件,具体地:
[0082]
执行编译处理命令(如:make-f makefile),对所述makefile文件进行编译处理,生成了编译规则文件所确定的格式的可执行文件(如:xloader.bin)。
[0083]
例如在一个例子中,生成的可执行文件的代码示例如下所示:
[0084]
~/fvp/bos$make-f makefile
[0085]
arm-v7-linux-uclibceabi-gcc-c uart.c-o uart.o
[0086]
arm-v7-linux-uclibceabi-gcc-c start.s-o start.o
[0087]
arm-v7-linux-uclibceabi-gcc-c crt0.s-o crt0.o
[0088]
arm-v7-linux-uclibceabi-gcc-c vectors_m.s-o vectors_m.o
[0089]
arm-v7-linux-uclibceabi-gcc-c interrupts_m.c-o interrupts_m.o
[0090]
arm-v7-linux-uclibceabi-gcc-c vsprintf.c-o vsprintf.o
[0091]
arm-v7-linux-uclibceabi-gcc-c board_f.c-o board_f.o
[0092]
arm-v7-linux-uclibceabi-gcc-c main.c-o main.o
[0093]
arm-v7-linux-uclibceabi-ld-nostdlib-t xloader.lds uart.o start.o crt0.o vectors_m.o interrupts_m.o vsprintf.o board_f.o main.o-map xloader.map-o xloader.elf
[0094]
arm-v7-linux-uclibceabi-objcopy-o binary-r.note.gnu.build-id xloader.elf xloader.bin
[0095]
可以理解的是,利用本发明所提供的方法,在项目中的软件工程在增删待编译的文件时,无需通过手工对所有的makefile文件进行一一编辑,大大提高效率,并降低人为操作的出错率,特别是工程中涉及数百个文件时,效果更为突出。
[0096]
在项目前期,软件工程所需要编译的文件是易变的,本方法在编译文件发生增加或删除后,只需调整预先编写的编译配置文件自动生成工具中需要过滤的文件列表和目录列表,即可以再次自动的生成软件工程所需的新的编译配置文件。免去了过多的人为修改,提高了效率,也减少了人为出错概率。
[0097]
如图2所示,示出了本发明提供的一种编译配置文件的自动生成装置1的一个实施例的结构示意图。一并结合图3和图4所示,在本实施例中,所述装置1至少包括:
[0098]
第一编译配置文件生成单元10,用于将软件工程中待编译文件和编译规则分离,生成仅包括编译规则的第一编译配置文件,所述编译规则至少包括待编译文件的编译顺序、链接规则以及需要生成的可执行文件的格式;
[0099]
第二编译配置文件自动生成单元11,用于利用预先编写的编译配置文件自动生成工具,搜索软件工程所在目录树下的待编译文件;将搜索到的待编译文件和对应的目录分别以文件列表和目录列表的形式保存在自动生成的第二编译配置文件中,其中,第二编译配置文件通过文件包含指令包含在第一编译配置文件中。
[0100]
如图3所示,在一个具体的例子中,所述编译规则文件生成单元10进一步包括:
[0101]
文件变量加载单元100,用于将第二编译配置文件通过文件包含指令加载到一个文件变量上;
[0102]
编译规则确定单元101,用于根据所述文件变量获得待编译文件的依赖关系,并确定待编译文件的编译顺序、链接规则以及需要生成的可执行文件的格式。
[0103]
如图4所示,在一个具体的例子中,所述第二编译配置文件自动生成单元11进一步包括:
[0104]
过滤内容确定单元110,用于根据所述预先编写的编译配置文件自动生成工具,确定需要过滤的文件列表和目录列表;
[0105]
过滤处理单元111,用于搜索软件工程所在目录树下所有的文件和目录,根据需要过滤的文件列表和目录列表,排除其中需要过滤的文件和目录,获得待编译文件以及对应的目录;
[0106]
格式化处理单元112,用于对所述待编译文件以及对应的目录的名称进行格式化处理;
[0107]
第二编译配置文件形成单元113,用于将名称经过格式化后的待编译文件和对应
的目录分别以文件列表和目标列表的形式写入自动生成的第二编译配置文件中。
[0108]
其中,进一步包括编译处理单元,用于执行编译处理命令,对所述第一编译配置文件进行编译处理,生成所述第一编译配置文件所确定的格式的可执行文件。
[0109]
其中,所述预先编写的编译配置文件自动生成工具为自动执行脚本文件,可以通过任何语言开发而成,其中至少定义有需要过滤的文件列表和目录列表。
[0110]
更多的细节说明,可以参考并结合前述对图1的描述,在此不再赘述。
[0111]
本技术还提供了一种电子设备,参见图5所示,本技术实施例提供的一种电子设备,包括:
[0112]
存储器300,用于存储计算机程序;
[0113]
处理器200,用于执行所述计算机程序时可以实现上述实施例所提供方法的步骤。
[0114]
具体的,存储器300包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机可读指令,该内存储器为非易失性存储介质中的操作系统和计算机可读指令的运行提供环境。处理器200在一些实施例中可以是一中央处理器(central processing unit,cpu)、控制器、微控制器、微处理器或其他数据处理芯片,为电子设备提供计算和控制能力,执行所述存储器300中保存的计算机程序时,可以实现前述任一种实施例公开的方法的步骤。
[0115]
在上述实施例的基础上,作为优选实施方式,参见图6所示,所述电子设备还包括:
[0116]
输入接口600,与处理器200相连,用于获取外部导入的计算机程序、参数和指令,经处理器200控制保存至存储器300中。该输入接口600可以与输入装置相连,接收用户手动输入的参数或指令。该输入装置可以是显示屏上覆盖的触摸层,也可以是终端外壳上设置的按键、轨迹球或触控板,也可以是键盘、触控板或鼠标等。
[0117]
显示单元400,与处理器200相连,用于显示处理器200处理的数据以及用于显示可视化的用户界面。该显示单元400可以为led显示器、液晶显示器、触控式液晶显示器以及oled(organic light-emitting diode,有机发光二极管)触摸器等。
[0118]
网络端口500,与处理器200相连,用于与外部各终端设备进行通信连接。该通信连接所采用的通信技术可以为有线通信技术或无线通信技术,如移动高清链接技术(mhl)、通用串行总线(usb)、高清多媒体接口(hdmi)、无线保真技术(wifi)、蓝牙通信技术、低功耗蓝牙通信技术、基于ieee802.11s的通信技术等。
[0119]
图6仅示出了具有组件200-600的电子设备,本领域技术人员可以理解的是,图6示出的结构并不构成对电子设备的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
[0120]
本技术还提供了一种计算机可读存储介质,该存储介质可以包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现前述任一种实施例公开的方法的步骤。
[0121]
实施本发明实施例,具有如下的有益效果:
[0122]
本发明提供一种编译配置文件的自动生成方法、装置、电子设备及存储介质,通过将makefile内的编译规则与编译文件分离,生成仅包括编译规则的第一编译配置文件,并采用预先编写的编译配置文件自动生成工具,自动生成第二编译配置文件,同时采用文件
包含指令将第一编译配置文件和第二编译配置文件关联起来,可以替代现有技术中通过cmake工具软件生成makefile的方案。
[0123]
利用本发明所提供的方法,在软件工程开发过程中,当需要增删文件时,只需要调整编译配置文件自动生成工具中所定义的需要过滤的文件列表和目录列表,即可以很方便地再次自动成软件工程所需的新的第二编译配置文件,免去了人为对诸多编译配置文件的修改,减少了人为出错概率,并提高了软件更新的效率。
[0124]
本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0125]
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0126]
以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献