CN111596920A - 文件编译方法、装置、编译设备及存储介质 - Google Patents
文件编译方法、装置、编译设备及存储介质 Download PDFInfo
- Publication number
- CN111596920A CN111596920A CN201910137097.3A CN201910137097A CN111596920A CN 111596920 A CN111596920 A CN 111596920A CN 201910137097 A CN201910137097 A CN 201910137097A CN 111596920 A CN111596920 A CN 111596920A
- Authority
- CN
- China
- Prior art keywords
- compiled
- file
- compiling
- source file
- source
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 67
- 230000001419 dependent effect Effects 0.000 claims description 14
- 230000015654 memory Effects 0.000 claims description 13
- 238000004891 communication Methods 0.000 claims description 5
- 238000004590 computer program Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 description 10
- 238000004806 packaging method and process Methods 0.000 description 7
- 238000006243 chemical reaction Methods 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 238000013478 data encryption standard Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
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
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,在申请的一些实施例中提供了一种编译设备10,该编译设备10可以是终端或者服务器。例如,在编译的文件对设备的性能要求不高的情况可以选择终端作为编译设备10,反之则可以选择服务器作为编译设备10。
其中,服务器可以为单个服务器,也可以是服务器组。服务器组可以是集中式的,也可以是分布式的(例如,服务器可以是分布式系统)。而在一些实施例中,服务器可以在云平台上实现;仅作为示例,云平台可以包括私有云、公有云、混合云、社区云(communitycloud)、分布式云、跨云(inter-cloud)、多云(multi-cloud)等,或者它们的任意组合。
而终端则可以是个人电脑(personal computer,PC)、平板电脑、智能手机、个人数字助理(personal digital assistant,PDA)等。
本实施例中,编译设备10可以用于实现本申请的文件编译方法。本申请尽管仅示出了一个设备,但是为了方便起见,也可以在多个类似设备上以分布式方式实现本申请描述的功能,以均衡处理负载。
例如,编译设备10可以包括连接到网络的通信接口11、用于执行程序指令的一个或多个处理器12、总线13、和不同形式的存储介质构成的存储器14,例如,磁盘、ROM、或RAM,或其任意组合。示例性地,计算机平台还可以包括存储在ROM、RAM、或其他类型的非暂时性存储介质、或其任意组合中的程序指令。根据这些程序指令可以实现本申请的方法。编译设备10还包括计算机与其他输入输出设备(例如键盘、显示屏)之间的输入/输出(Input/Output,I/O)接口15。
为了便于说明,在编译设备10中仅描述了一个处理器。然而,应当注意,本申请中的编译设备10还可以包括多个处理器,因此本申请中描述的一个处理器执行的步骤也可以由多个处理器联合执行或单独执行。例如,若编译设备10的处理器执行步骤A和步骤B,则应该理解,步骤A和步骤B也可以由两个不同的处理器共同执行或者在一个处理器中单独执行。例如,第一处理器执行步骤A,第二处理器执行步骤B,或者第一处理器和第二处理器共同执行步骤A和B。
需要说明的是,在进行编译的过程中,可以由一个编译设备10独立完成一个编译任务,或者也可以由至少两个编译设备10来配合完成一个编译任务,对此本实施例并不限定。
下面将就一个编译设备10或至少两个一个编译设备10配合执行该文件编译方法予以详细地说明。
请参阅图2,本申请的一些实施例提供了一种文件编译方法,该文件编译方法可以由编译设备执行,该文件编译方法可以包括:步骤S100、步骤S200和步骤S300。
步骤S100:根据编译指令,获得待编译源文件对应的编译参数。
步骤S200:根据所述编译参数,判断是否存在与所述待编译源文件对应的编译后目标文件。
步骤S300:若是,获取所述编译后目标文件;否则,根据所述编译指令,编译所述待编译源文件。
下面将对上述步骤进行详细地说明。
步骤S100:根据编译指令,获得待编译源文件对应的编译参数。
本实施例的文件编译方法在执行过程中的核心可以是在获得待编译源文件后,先不立刻编译该待编译源文件,而是先判断该待编译源文件是否已经被编译过,若否则编译该待编译源文件。但现有的编译方法是在获得待编译源文件后,可以直接对该待编译源文件进行编译。
因此,为实现在现有编译器的基础上进行简单的改进便可以实现对本申请方法执行,以便于本申请的方法在实际中能够广泛的应用。可选地,可以对编译指令进行封装,例如,在常规的编译指令中增加一个前缀值,如:gcache$(CC),以通过该前缀值将常规的编译指令进行封装,从而获得为封装格式的编译指令。
这样,编译设备在获得编译指令时,便可以通过判断该编译指令的格式是否为封装格式来确定是执行本申请的方法还是现有的编译方法。
若编译设备确定该编译指令的格式不为封装格式,即确定编译指令中不包含前缀值,那么编译设备可以执行现有的编译方法,即编译设备可以通过编译指令获得待编译源文件,并可以直接对该待编译源文件进行编译。
若编译设备确定该编译指令的格式为封装格式,即确定编译指令中包含前缀值,那么编译设备则可以执行本申请的文件编译方法,即编译设备也可以通过编译指令获得待编译源文件,并可以判断是否需要编译该待编译。
可以理解到的是,通过增加前缀值的方法对编译指令进行封装,其不仅通过简单的方式实现对本申请的文件编译方法的执行,其还实现了编译设备不仅可以执行本申请的文件编译方法,编译设备还可以通过未封装的编译指令来继续执行现有的编译方法,实现了编译设备可以无缝切换的执行本申请的文件编译方法和现有的编译方法。
在本申请中,编译设备确定执行文件编译方法时,编译设备可以基于解析该编译指令而获得包含该在编译指令中与待编译源文件对应的编译参数,并还可以根据编译参数的指向而去获取该待编译源文件和该待编译源文件所依赖的头文件。
本实施例中,基于解析该编译指令而获得的编译参数可以包括:用于编译该待编译源文件的编译器的信息,该信息可以是可执行的文件的绝对路径、文件大小、修改时间;该待编译源文件的编译选项;以及该待编译源文件的路径,其中,该待编译源文件的路径可以是绝对路径,这样通过该待编译源文件的绝对路径所指向的存储区域,便可以从对应的存储区域中准确的获取到该待编译源文件和该待编译源文件依赖的头文件。
可选地,该待编译源文件可以是嵌入式软件的程序文件,当然并不限定于此。例如,其还可以是非嵌入软件的程序文件,如一些APP(Application,应用程序)的程序文件。
其中,上述的待编译源文件的相关信息并不限于此,实际中可以根据需求选择;例如,若还需要更准确的判断,则还可以获得更加详细地的相关信息,如还获得待编译源文件的文件小大。
下面将以安装linux系统的编译设备为示例来说明。
针对一个带编译文件version.c的编译指令为:gcache arm-linux-gcc-rdynamic-Wall -mlong-calls -O2–g–DMPU -I/arm/include -include/arm/include/generated/autoconf.h -Werror -c src/version.c -o src/version.o。
那么,编译设备基于前缀值为gcache便可以确定该编译指令的格式为封装格式,从而确定需要判断该待编译源文件是否需要编译。这样,编译设备基于该编译指令的指向可以获得编译器可执行的文件的绝对路径为:/opt/armv7-broadcom-glibc/bin/arm-linux-gcc。以及,编译设备也基于该编译指令的指向可以获得待编译源文件的路径为:/home/test/src/version.c。此外,编译设备还可以从该编译指令中包含的数据获得待编译源文件的编译选项为:-rdynamic -Wall -mlong-calls -O2–g–DMPU -I/arm/include -include/arm/include/generated/autoconf.h -Werror -c src/version.c -o src/version.o,以及还可以获得待编译源文件的名称为src/version.o。基于此,编译设备则可以根据待编译源文件的路径为/home/test/src/version.c去找到该路径对应的存储区域,并根据待编译源文件的名称为src/version.o从而从该存储区域中确定出该待编译源文件和该待编译源文件所依赖的头文件。
本实施例中,在获得编译参数,待编译源文件和待编译源文件依赖的头文件后,编译设备可以继续执行步骤S200。
步骤S200:根据所述编译参数,判断是否存在与所述待编译源文件对应的编译后目标文件。
本实施例中,为减少无效的判断,编译设备对待编译源文件的判断需要有合理的判断流程。故此可选地是,编译设备可以先判断待编译源文件对应的存储目录是否存在,其中,该存储目录可以是存储编译后目标文件的存储区域的目录,而该编译后目标文件则可以是编译该待编译源文件而获得。那么,若该存储目录都不存在,则说明该待编译源文件没有编译过,就可以无需再进行后续的判断了,因此便节约了判断的流程,减少了无效的判断。
作为一种可选地方式,编译设备可以基于编译参数去确定出待编译源文件对应的该存储目录。编译设备可以根据该编译参数中编译器的信息确定出该编译器的哈希值,例如,编译设备可以采用如MD3或MD5等算法将编译器可执行的文件的绝对路径、文件大小、修改时间进行哈希值转换,从而得到编译器的哈希值。与此同时,编译设备还可以根据待编译源文件的内容确定出该待编译源文件的哈希值,也例如,编译设备也可以采用如MD3或MD5等算法将待编译源文件的内容进行哈希值转换,从而得到编译文件的哈希值。
这样,将该编译器的哈希值和该待编译源文件的哈希值组合,便可以生成该待编译源文件对应的存储目录。可以理解到的是,利用哈希值的方式可以保证生产的存储目录可以具有唯一性,避免因存储目录的重复而导致误判断。
那么,在生成该存储目录后,编译设备便可以判断是否存在与该存储目录相同的目标存储目录。
编译设备若确定不存在该目标存储目录,则说明该待编译源文件未被编译过,即需要编译该待编译源文件。
编译设备若确定存在该目标存储目录,则说明该待编译源文件可能被编译过,需要进一步判断。
那么,在确定存在该目标存储目录时,编译设备可以根据目标存储目录确定出该目标存储目录所指向的存储区域,并获取该存储区域中的编译后目标文件的相关信息。
本实施例中,针对不同应用环境,在该编译设备独立的编译该待编译源文件时,该存储区域可以位于该编译设备中。例如,在对文件的编译是需要实时性时,存储区域可以位于该编译设备的内存中;或者,在对文件的编译不能太占用性能时,存储区域则可以位于该编译设备的缓存中。或者,在由多个编译设备配合编译该待编译源文件时,该存储区域则可以位于其它编译设备中,例如位于其它设备的内存或者缓存中。
本实施例中,编译后目标文件的相关信息可以包括:编译后目标文件对应的源文件的编译选项的哈希值,其中,而该编译选项的哈希值则也可以利用MD3或MD5等算法将源文件的编译选项进行哈希值转换而获得。以及,编译后目标文件对应的源文件依赖的头文件的哈希值。其中,该编译后目标文件对应的源文件依赖的头文件的哈希值也可以是利用MD3或MD5等算法将源文件依赖的头文件进行哈希值转换而获得。
于此同时,编译设备还可以根据编译参数中待编译源文件的路径去获取该待编译源文件依赖的头文件,并也确定该待编译源文件依赖的头文件的哈希值,其中,该待编译源文件依赖的头文件的哈希值也可以是利用MD3或MD5等算法将待编译源文件依赖的头文件进行哈希值转换而获得。
需要说明的是,上述进行哈希值的转换可以使得获得哈希值具有唯一性,以保证判断的准确性,避免由于重复而导致误判断。
这样,编译设备便可以判断待编译源文件的编译选项与存储目录中的编译选项是否相同,即判断待编译源文件的编译选项的哈希值与存储目录中的编译选项的哈希值是否相同;并判断待编译源文件和待编译源文件依赖的头文件中是否包含预设宏字符;以及还判断待编译源文件依赖的头文件与存储目录中的头文件是否相同,即判断待编译源文件依赖的头文件的哈希值与存储目录中的头文件的哈希值是否相同。
可以理解到,判断待编译源文件的编译选项的哈希值与存储目录中的编译选项的哈希值是否相同,并判断待编译源文件和待编译源文件依赖的头文件中是否包含预设宏字符,以及判断待编译源文件依赖的头文件的哈希值与存储目录中的头文件的哈希值是否相同,本实施例并不限定其判断顺序,其顺序可以根据实际需求进行设置。
那么,在确定待编译源文件的编译选项与存储目录中的编译选项相同,即待编译源文件的编译选项的哈希值与存储目录中的编译选项的哈希值相同;以确定待编译源文件和待编译源文件依赖的头文件中不包含预设宏字符;并确定待编译源文件依赖的头文件与存储目录中的头文件是否相同,即待编译源文件依赖的头文件的哈希值与存储目录中的头文件的哈希值相同时,则可以表示该存储区域中该编译后目标文件为之前基于待编译源文件编译获得的文件,故本次可以不用对该待编译源文件进行编译。
反之,上述判断中有任意一个判断结果为不相同,则表示该存储目录中的编译后目标文件不为由待编译源文件编译所获得的文件。例如,在待编译源文件的编译选项与存储目录中的编译选项不相同时,即此时本次编译的待编译源文件与之前编译的源文件的内容相同,但由于编译的需求不同,也需要对该待编译源文件重新进行编译。又例如,在待编译源文件和待编译源文件依赖的头文件中包含预设宏字符,如包含__FILE__、__DATE__、__TIME等预设宏字符时,则表示该待编译源文件和待编译源文件依赖的头文件是具有特殊性的而不具有普适性,故也需要对该待编译源文件进行重新的编译。还例如,在待编译源文件依赖的头文件与存储目录中的头文件不相同时,由于依赖的头文件不同可以导致编译结果发生变化,故也需要对该待编译源文件进行重新的编译。
需要说明的是,上述的判断方式仅为本实施例的一种例举说明,并不作为本实施例的限定。在本实施例其它的一些实施方式中,其可以采用非哈希值的方式,例如,其可以采用DES算法(Data Encryption Standard,数据加密标准)、RC4算法(Rivest Cipher 4,里维斯特密码4)、RC5算法(Rivest Cipher 4,里维斯特密码5)、ECC算法(Elliptic curvecryptography,椭圆加密算法)或DSA算法(Digital Signature Algorithm,数字签名算法)等对待编译源文件的编译选项、用于编译该待编译源文件的编译器可执行的文件的绝对路径、文件大小和修改时间、待编译源文件的内容、待编译源文件依赖的头文件、待编译源文件依赖的头文件进行加密运算,从而可以获得待编译源文件的编译选项的加密值、该编译器可执行的文件的绝对路径、文件大小和修改时间的加密值、待编译源文件的内容的加密值、待编译源文件依赖的头文件的加密值、待编译源文件依赖的头文件的加密值。这样,编译设备利用上述对哈希值的判断逻辑对加密值是否相同进行判断,就也可以确定是否需要编译该待编译源文件。
需要说明的是,本实施例可以采用至少一种不同的算法来获得不同的加密值,但针对同一类判断的数据则需要通过同一种相同的算法,以保证判断的准确性。例如,对待编译源文件的编译选项和存储目录中的编译选项的加密运算可以采用DSA算法,但对待编译源文件依赖的头文件和存储目录中的依赖的头文件的加密运算可以采用RC4算法。
还需要说明的是,上述的判断方式仅为本实施例的一种例举说明,并不作为本实施例的限定。在本实施例其它的一些实施方式中,其还可以采用不加密运算的方式,虽然准确度稍低但也可以满足实际应用。例如,可以不经过哈希或其它方式的加密运算,可以直接判断待编译源文件的编译参数与存储目录中的编译参数是否相同,以及判断待编译源文件依赖的头文件与存储目录中的头文件是否相同。
步骤S300:若是,获取所述编译后目标文件;否则,根据所述编译指令,编译所述待编译源文件。
在确定为无需编译时,该待确定编译后目标文件即为该待编译源文件编译后对应的编译后目标文件。故编译设备便可以从存储区域获取该编译后目标文件,而无需对该待编译进行编译。
反之,在确定为需要编译时,如图3所示,在本实施例的一些实施方式中,编译设备则可以执行步骤S400、步骤S500和步骤S600。
步骤S400:根据所述编译指令编译所述待编译源文件,获得所述编译后目标文件、用于表示所述待编译源文件和所述待编译源文件依赖的头文件中是否包含预设宏字符的信息和所述头文件。
步骤S500:确定出所述编译后目标文件对应的存储区域。
步骤S600:将基于所述编译参数获得的所述待编译源文件的编译选项、所述信息、所述头文件、以及所述编译后目标文件存储到所述存储区域中。
下面也将对上述步骤进行详细地说明。
步骤S400:根据所述编译指令编译所述待编译源文件,获得所述编译后目标文件、用于表示所述待编译源文件和所述待编译源文件依赖的头文件中是否包含预设宏字符的信息和所述头文件。
编译设备确定不存在编译后目标文件,那么说明需要对该待编译源文件重新进行编译。这样,编译设备可以根据编译指令调用编译该待编译源文件的编译器,并根据编译指令利用该编译器按待编译源文件的编译选项编译该待编译源文件,从而便可以获得该编译后目标文件。
此外,此时还可以去获取前述流程中通过解析编译指令而确定出的信息,即获取到:用于表示待编译源文件和待编译源文件依赖的头文件中是否包含预设宏字符的信息,包含该待编译源文件依赖头文件的列表,待编译源文件的编译选项的哈希值,待编译源文件所依赖的头文件的哈希值。
需要说明的是,在前述的加密流程不是哈希加密的情况下,那么所获得的待编译源文件的编译选项和待编译源文件所依赖的头文件的加密信息可以按照前述的加密方式作相应理解,在此不再累述。
步骤S500:确定出所述编译后目标文件对应的存储区域。
当然,为便于对编译后目标文件进行存储,可以确定出该编译后目标文件对应的存储区域。可选地,可以根据待编译源文件对应的存储目录来从待编译设备的内存、待编译设备的缓存、其它编译设备的内存或其它编译设备的缓存中确定该存储区域。
步骤S600:将基于所述编译参数获得的所述待编译源文件的编译选项、所述信息、所述头文件、以及所述编译后目标文件存储到所述存储区域中。
本实施例中,在后续编译过程中若存在与该待编译源文件相同的文件,为便于通过对该相同的文件进行判断,而确定无需编译该相同的文件,故编译设备还可以将待编译源文件的相关信息存储到该存储区域中。
可选地,编译设备不仅可以将编译后目标文件存储到存储区域中,且还可以将用于表示待编译源文件和待编译源文件依赖的头文件中是否包含预设宏字符的信息,包含该待编译源文件依赖头文件的列表,待编译源文件的编译选项的哈希值,待编译源文件所依赖的头文件的哈希值均存储到存储区域中。
需要说明的是,对步骤S400和步骤S500的执行流程可以不限定与上述方式,例如,步骤S400和步骤S500可以同步执行,或者步骤S500可以先于步骤S400执行。
请参阅图4,本申请实施例提供了一种文件编译装置100,该文件编译装置100应用于编译设备,该文件编译装置100可以包括:
参数获得模块110,用于用于根据编译指令,获得待编译源文件对应的编译参数。
编译判断模块120,用于若是,获取所述编译后目标文件;否则,根据所述编译指令,编译所述待编译源文件。
目标文件获得模块130,用于若是,获取所述编译后目标文件。
可选地,所述编译判断模块120,还用于根据所述编译参数获得所述待编译源文件对应的编译后目标文件的存储目录;在确定存在所述存储目录时,根据所述编译参数判断所述存储目录中是否存在与所述编译后目标文件。
可选地,所述编译参数包括:所述待编译源文件的编译选项和路径;
所述编译判断模块120,判断所述待编译源文件的编译选项与所述存储目录中的编译选项是否相同,判断所述待编译源文件和所述待编译源文件依赖的头文件中是否包含预设宏字符,以及判断所述待编译源文件依赖的头文件与所述存储目录中的头文件是否相同,所述待编译源文件依赖的头文件为基于所述待编译源文件的路径获得;
其中,在所述待编译源文件的编译选项与所述存储目录中的编译选项相同,所述待编译源文件和所述待编译源文件依赖的头文件中不包含所述预设宏字符,以及所述待编译源文件依赖的头文件与所述存储目录中的头文件相同时,表示所述存储目录中的所述编译后目标文件为基于所述待编译源文件编译获得的文件。
可选地,所述编译参数还包括用于编译所述待编译源文件的编译器的参数;
所述编译判断模块120,还用于获得所述参数的哈希值,以及获得所述待编译源文件的哈希值,所述待编译源文件为基于所述待编译源文件的路径获得;将所述参数的哈希值和所述待编译源文件的哈希值组合,生成所述待编译源文件对应的编译后目标文件的存储目录。
可选地,所述目标文件获得模块130,还用于根据所述编译指令编译所述待编译源文件,获得所述编译后目标文件、用于表示所述待编译源文件和所述待编译源文件依赖的头文件中是否包含预设宏字符的信息和所述头文件;确定出所述编译后目标文件对应的存储区域;将基于所述编译参数获得的所述待编译源文件的编译选项、所述信息、所述头文件、以及所述编译后目标文件存储到所述存储区域中。
需要说明的是,由于所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请一些实施例还提供了一种计算机可执行的非易失的程序代码的计算机可读储存介质,该计算机可读存储介质上存储有程序代码,该程序代码被计算机运行时执行上述任一实施方式的文件编译方法的步骤。
具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的程序代码被运行时,以实现高效的对文件进行编译。
本申请实施例所提供的文件编译方法的程序代码产品,包括存储了程序代码的计算机可读存储介质,程序代码包括的指令可用于执行前面方法实施例中的方法,具体实现可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
综上所述,本申请实施例提供了一种文件编译方法、装置、编译设备及存储介质。方法包括:根据编译指令,获得待编译源文件对应的编译参数;根据所述编译参数,判断是否存在与所述待编译源文件对应的编译后目标文件;若是,获取所述编译后目标文件;否则,根据所述编译指令,编译所述待编译源文件。
在编译待编译源文件之前,可以通过判断是否存在与该待编译源文件对应的编译后目标文件来判断该编译待编译源文件是否被编译过。若存在,则无需编译直接获得该已经编译好的编译后目标文件即可。因此,通过这种方式,减少了无效的且冗余的编译,大大的提高了编译效率。
以上仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (12)
1.一种文件编译方法,其特征在于,所述方法包括:
根据编译指令,获得待编译源文件对应的编译参数;
根据所述编译参数,判断是否存在与所述待编译源文件对应的编译后目标文件;
若是,获取所述编译后目标文件;否则,根据所述编译指令,编译所述待编译源文件。
2.根据权利要求1所述的文件编译方法,其特征在于,所述根据所述编译参数,判断是否存在与所述待编译源文件对应的编译后目标文件,包括:
根据所述编译参数获得所述待编译源文件对应的编译后目标文件的存储目录;
在确定存在所述存储目录时,根据所述编译参数判断所述存储目录中是否存在与所述编译后目标文件。
3.根据权利要求2所述的文件编译方法,其特征在于,所述编译参数包括:所述待编译源文件的编译选项和路径,根据所述编译参数判断所述存储目录中是否存在与所述编译后目标文件,包括:
判断所述待编译源文件的编译选项与所述存储目录中的编译选项是否相同,判断所述待编译源文件和所述待编译源文件依赖的头文件中是否包含预设宏字符,以及判断所述待编译源文件依赖的头文件与所述存储目录中的头文件是否相同,所述待编译源文件依赖的头文件为基于所述待编译源文件的路径获得;
其中,在所述待编译源文件的编译选项与所述存储目录中的编译选项相同,所述待编译源文件和所述待编译源文件依赖的头文件中不包含所述预设宏字符,以及所述待编译源文件依赖的头文件与所述存储目录中的头文件相同时,表示所述存储目录中的所述编译后目标文件为基于所述待编译源文件编译获得的文件。
4.根据权利要求3所述的文件编译方法,其特征在于,所述编译参数还包括用于编译所述待编译源文件的编译器的参数,所述根据所述编译参数获得所述待编译源文件对应的编译后目标文件的存储目录,包括:
获得所述参数的哈希值,以及获得所述待编译源文件的哈希值,所述待编译源文件为基于所述待编译源文件的路径获得;
将所述参数的哈希值和所述待编译源文件的哈希值组合,生成所述待编译源文件对应的编译后目标文件的存储目录。
5.根据权利要求1所述的文件编译方法,其特征在于,所述根据所述编译指令,编译所述待编译源文件,包括:
根据所述编译指令编译所述待编译源文件,获得所述编译后目标文件、用于表示所述待编译源文件和所述待编译源文件依赖的头文件中是否包含预设宏字符的信息和所述头文件;
确定出所述编译后目标文件对应的存储区域;
将基于所述编译参数获得的所述待编译源文件的编译选项、所述信息、所述头文件、以及所述编译后目标文件存储到所述存储区域中。
6.一种文件编译装置,其特征在于,所述装置包括:
参数获得模块,用于根据编译指令,获得待编译源文件对应的编译参数;
编译判断模块,用于根据所述编译参数,判断是否存在与所述待编译源文件对应的编译后目标文件;
目标文件获得模块,用于若是,获取所述编译后目标文件;否则,根据所述编译指令,编译所述待编译源文件。
7.根据权利要求6所述的文件编译装置,其特征在于,
所述编译判断模块,还用于根据所述编译参数获得所述待编译源文件对应的编译后目标文件的存储目录;在确定存在所述存储目录时,根据所述编译参数判断所述存储目录中是否存在与所述编译后目标文件。
8.根据权利要求7所述的文件编译装置,其特征在于,所述编译参数包括:所述待编译源文件的编译选项和路径,
所述编译判断模块,还用于判断所述待编译源文件的编译选项与所述存储目录中的编译选项是否相同,判断所述待编译源文件和所述待编译源文件依赖的头文件中是否包含预设宏字符,以及判断所述待编译源文件依赖的头文件与所述存储目录中的头文件是否相同,所述待编译源文件依赖的头文件为基于所述待编译源文件的路径获得;
其中,在所述待编译源文件的编译选项与所述存储目录中的编译选项相同,所述待编译源文件和所述待编译源文件依赖的头文件中不包含所述预设宏字符,以及所述待编译源文件依赖的头文件与所述存储目录中的头文件相同时,表示所述存储目录中的所述编译后目标文件为基于所述待编译源文件编译获得的文件。
9.根据权利要求8所述的文件编译装置,其特征在于,所述编译参数还包括用于编译所述待编译源文件的编译器的参数,
所述编译判断模块,还用于获得所述参数的哈希值,以及获得所述待编译源文件的哈希值,所述待编译源文件为基于所述待编译源文件的路径获得;将所述参数的哈希值和所述待编译源文件的哈希值组合,生成所述待编译源文件对应的编译后目标文件的存储目录。
10.根据权利要求6所述的文件编译装置,其特征在于,
所述目标文件获得模块,还用于根据所述编译指令编译所述待编译源文件,获得所述编译后目标文件、用于表示所述待编译源文件和所述待编译源文件依赖的头文件中是否包含预设宏字符的信息和所述头文件;确定出所述编译后目标文件对应的存储区域;将基于所述编译参数获得的所述待编译源文件的编译选项、所述信息、所述头文件、以及所述编译后目标文件存储到所述存储区域中。
11.一种编译设备,其特征在于,所述编译设备包括:处理器,存储器,总线和通信接口;
所述处理器、所述通信接口和存储器通过所述总线连接;
所述存储器,用于存储程序;
所述处理器,用于通过调用存储在所述存储器中的程序以执行如权利要求1-5任一权项所述的文件编译方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被计算机运行时执行如权利要求1-5任一权项所述的文件编译方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910137097.3A CN111596920B (zh) | 2019-02-21 | 2019-02-21 | 文件编译方法、装置、编译设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910137097.3A CN111596920B (zh) | 2019-02-21 | 2019-02-21 | 文件编译方法、装置、编译设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111596920A true CN111596920A (zh) | 2020-08-28 |
CN111596920B CN111596920B (zh) | 2024-06-18 |
Family
ID=72190605
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910137097.3A Active CN111596920B (zh) | 2019-02-21 | 2019-02-21 | 文件编译方法、装置、编译设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111596920B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113641389A (zh) * | 2021-08-31 | 2021-11-12 | 广东九联科技股份有限公司 | 基于OpenCPU的软件升级方法、装置及设备 |
CN114661301A (zh) * | 2022-05-24 | 2022-06-24 | 深圳思谋信息科技有限公司 | 图形处理单元编译方法、装置、编译加速库和存储介质 |
CN117251205A (zh) * | 2023-11-16 | 2023-12-19 | 沐曦集成电路(杭州)有限公司 | 一种头文件的处理方法、装置、设备及介质 |
WO2024109090A1 (zh) * | 2022-11-23 | 2024-05-30 | 深圳市汇川技术股份有限公司 | 可编程逻辑控制器的混合执行方法、装置、设备及介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101216776A (zh) * | 2008-01-15 | 2008-07-09 | 中兴通讯股份有限公司 | 一种自动创建编译环境的方法及系统 |
CN101963915A (zh) * | 2010-09-25 | 2011-02-02 | 中兴通讯股份有限公司 | 一种编译的构建方法及系统 |
CN102402452A (zh) * | 2011-12-12 | 2012-04-04 | 深圳市共进电子股份有限公司 | 一种编译方法及装置 |
CN105930151A (zh) * | 2016-04-15 | 2016-09-07 | 北京小米移动软件有限公司 | 应用程序的编译方法、装置及终端 |
CN106325970A (zh) * | 2016-10-17 | 2017-01-11 | 宁德时代新能源科技股份有限公司 | 编译方法和编译系统 |
CN106445625A (zh) * | 2016-09-23 | 2017-02-22 | 网易(杭州)网络有限公司 | 一种待编译代码的预处理方法及装置 |
CN108153529A (zh) * | 2017-12-22 | 2018-06-12 | 杭州迪普科技股份有限公司 | 一种文件编译的方法及装置 |
CN108334325A (zh) * | 2017-12-26 | 2018-07-27 | 努比亚技术有限公司 | 一种编译方法、计算机及计算机可读存储介质 |
-
2019
- 2019-02-21 CN CN201910137097.3A patent/CN111596920B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101216776A (zh) * | 2008-01-15 | 2008-07-09 | 中兴通讯股份有限公司 | 一种自动创建编译环境的方法及系统 |
CN101963915A (zh) * | 2010-09-25 | 2011-02-02 | 中兴通讯股份有限公司 | 一种编译的构建方法及系统 |
CN102402452A (zh) * | 2011-12-12 | 2012-04-04 | 深圳市共进电子股份有限公司 | 一种编译方法及装置 |
CN105930151A (zh) * | 2016-04-15 | 2016-09-07 | 北京小米移动软件有限公司 | 应用程序的编译方法、装置及终端 |
CN106445625A (zh) * | 2016-09-23 | 2017-02-22 | 网易(杭州)网络有限公司 | 一种待编译代码的预处理方法及装置 |
CN106325970A (zh) * | 2016-10-17 | 2017-01-11 | 宁德时代新能源科技股份有限公司 | 编译方法和编译系统 |
CN108153529A (zh) * | 2017-12-22 | 2018-06-12 | 杭州迪普科技股份有限公司 | 一种文件编译的方法及装置 |
CN108334325A (zh) * | 2017-12-26 | 2018-07-27 | 努比亚技术有限公司 | 一种编译方法、计算机及计算机可读存储介质 |
Non-Patent Citations (1)
Title |
---|
雨田嘟嘟: "避免重复编译的两种方法的区别", pages 1 - 2, Retrieved from the Internet <URL:https://blog.csdn.net/xuleisdjn/article/details/51569059> * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113641389A (zh) * | 2021-08-31 | 2021-11-12 | 广东九联科技股份有限公司 | 基于OpenCPU的软件升级方法、装置及设备 |
CN113641389B (zh) * | 2021-08-31 | 2024-02-09 | 广东九联科技股份有限公司 | 基于OpenCPU的软件升级方法、装置及设备 |
CN114661301A (zh) * | 2022-05-24 | 2022-06-24 | 深圳思谋信息科技有限公司 | 图形处理单元编译方法、装置、编译加速库和存储介质 |
WO2024109090A1 (zh) * | 2022-11-23 | 2024-05-30 | 深圳市汇川技术股份有限公司 | 可编程逻辑控制器的混合执行方法、装置、设备及介质 |
CN117251205A (zh) * | 2023-11-16 | 2023-12-19 | 沐曦集成电路(杭州)有限公司 | 一种头文件的处理方法、装置、设备及介质 |
CN117251205B (zh) * | 2023-11-16 | 2024-02-06 | 沐曦集成电路(杭州)有限公司 | 一种头文件的处理方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111596920B (zh) | 2024-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111596920B (zh) | 文件编译方法、装置、编译设备及存储介质 | |
US9823909B1 (en) | Program code conversion for cross-platform compatibility | |
CN109062582B (zh) | 一种应用安装包的加密方法及装置 | |
CN109886689B (zh) | 基于区块链的数据存证、取证方法及装置 | |
US10061567B2 (en) | Multi-sized data types for managed code | |
CN105590051A (zh) | 用于可信执行环境的可信应用生成及安装方法 | |
CA2967640A1 (en) | System and method for providing and executing a domain-specific language for cloud services infrastructure | |
CN111158741B (zh) | 监控业务模块对第三方类库依赖关系变化的方法及装置 | |
WO2022139952A1 (en) | Detecting added functionality in open source package | |
CN109947432B (zh) | 汇编程序处理方法及相关装置 | |
CN112769706B (zh) | 组件化路由方法及系统 | |
CN111008034A (zh) | 一种补丁生成方法及装置 | |
CN105404794A (zh) | Java应用软件的保护方法和装置 | |
CN111026439A (zh) | 应用程序的兼容方法、装置、设备及计算机存储介质 | |
CN110955434B (zh) | 软件开发包处理方法、装置、计算机设备和存储介质 | |
CN112925586B (zh) | 一种小程序路由方法、装置、计算机设备及存储介质 | |
CN107239298B (zh) | 应用程序调试方法及装置 | |
CN112965731A (zh) | 基于Tinker的Flutter热更新方法、装置、设备及存储介质 | |
CN110807195A (zh) | 一种智能合约的发布方法、发布平台装置及发布系统 | |
CN113138768B (zh) | 应用程序包生成方法、装置、电子设备以及可读存储介质 | |
CN112506796B (zh) | 数据处理方法、装置、设备以及存储介质 | |
CN113010115B (zh) | 区块链节点中的数据处理方法及相关设备 | |
CN110457151B (zh) | 热修复方法、装置及可读存储介质 | |
CN114706586A (zh) | 代码编译、代码运行方法、装置、计算机设备及存储介质 | |
CN111428209B (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 | ||
GR01 | Patent grant |