CN114546409A - 一种编译产物与源码隔离的方法、系统及存储介质 - Google Patents
一种编译产物与源码隔离的方法、系统及存储介质 Download PDFInfo
- Publication number
- CN114546409A CN114546409A CN202210199845.2A CN202210199845A CN114546409A CN 114546409 A CN114546409 A CN 114546409A CN 202210199845 A CN202210199845 A CN 202210199845A CN 114546409 A CN114546409 A CN 114546409A
- Authority
- CN
- China
- Prior art keywords
- source code
- folder
- under
- creating
- compiled
- 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.)
- Pending
Links
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
本发明提供一种编译产物与源码隔离的方法、系统及存储介质,属于软件开发技术领域。本发明编译产物与源码隔离的方法包括如下步骤:(1)在源码根目录下创建第一文件夹;(2)在第一文件夹下创建与源码目录结构相同的目标文件,其中,目标文件中的非文件夹为指向源码对应文件的链接文件。本发明的有益效果为:只需要对源代码做简单的适配,就可以做到编译产物和源码隔离。
Description
技术领域
本发明涉及软件开发技术领域,具体涉及一种编译产物与源码隔离的方法、系统及存储介质。
背景技术
如图1所示,在嵌入式开发中,很多公司都会采用一份代码编译不同产品的代码管理策略,这种情况下代码的编译通常是没有做到源码和编译产物隔离的。这样就会带来如下的显而易见的问题:
1.编译源码之后由于编译产物与源码混合在一起会给使用了git(分布式版本控制系统)、svn(Subversion的简称,是一个开放源代码的版本控制系统)等代码版本控制系统的忽略规则的编写带来不小的麻烦,以git代码版本版本管理系统为例,忽略编译产物的跟踪通常需要编译一长串繁琐的.gitignore的过滤规则;
2.同一份代码编译多个方案(例如arm、mips等)通常也很麻烦,通常的做法是:下载多份源码构每份源码都编译构建不同的方案(两份源码一份构建arm架构的方案,另一份构建mips架构的方案);或者是编译完一个方案(例如arm架构的方案)后清理工作空间然后再重新编译构建另外一种方案(例如mips架构的方案)。
编译和源码隔离的方式开源的方案中比较有代表性的是buildroot、openwrt等的解决方案。其隔离的目录结构如图2所示,此种解决方案中,第一行为根目录,第二行为源码文件,第三行和第四行为编译产物,因此,此种解决方案做到了编译产物(图1中第三行bin、build_dir、staging_dir、dl、feeds和第四行host、hostpkg、target-aarch64、target-x86_64、toolchain-aarch64、toolchain-x86_64)与源码(图1中第二行tools、toolchain、include、scripts、targets、package等)隔离。但是此种结构会有如下两个问题:
1.openwrt的整体目录架构复杂。一般的项目根本就没有适配openwrt的编译框架,重新适配相当于是一次小的架构调整,涉及的改动点比较大,给软件开发造成很大不便;
2.buildroot、openwrt等的隔离方案无法实现多个方案并行编译。
发明内容
为解决现有技术中的问题,本发明提供一种编译产物与源码隔离的方法,还提供了一种实现所述编译产物与源码隔离的方法的系统及存储该系统的存储介质,只需要在原来的编译框架下做最小的改动来达到编译产物与源码的隔离的效果,不需要改变原有的编译习惯。
本发明编译产物与源码隔离的方法,包括如下步骤:
(1)在源码根目录下创建第一文件夹;
(2)在第一文件夹下创建与源码目录结构相同的目标文件,其中,目标文件中的非文件夹为指向源码对应文件的链接文件。
本发明作进一步改进,步骤(1)中,所述第一文件夹的数量为1个以上,每个第一文件夹并列设置在所述源码根目录下。
本发明作进一步改进,步骤(2)中,建立与源码目录结构相同且名称一一对应相同的目标文件。
本发明作进一步改进,所述目标文件创建方法为:判断源码是否为文件夹,如果是,则在第一文件夹下创建与源码文件夹级数相同的、相同名称的文件夹,如果否,则在第一文件夹下创建与源码文件级数相同、名称相同的链接文件,链接指向源码文件。
本发明还提供了一种实现所述编译产物与源码隔离的方法的系统,包括:
第一创建模块:用于在源码根目录下创建第一文件夹;
第二创建模块:用于在第一文件夹下创建与源码目录结构相同的目标文件,其中,目标文件中的非文件夹为指向源码对应文件的链接文件。
本发明还提供了一种存储介质,所述存储介质存储有编译产物与源码隔离程序,所述编译产物与源码隔离程序被处理器调用时执行所述编译产物与源码隔离的方法的步骤。
与现有技术相比,本发明的有益效果是:只需要对源代码做简单的适配,就可以做到编译产物和源码隔离。使得开发人员更加专注与源码的修改,而不会因为编译产物和源码混合在一起过多而给开发人员带来不必要的困扰;使得同一份代码下并行构建多个方案成为可能。
附图说明
为了更清楚地说明本申请或现有技术中的方案,下面将对实施例或现有技术描述中所需要使用的附图作一个简单介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术源码与编译产物未隔离结构示意图;
图2为现有技术源码与编译产物隔离的实施例目录结构示意图;
图3为本发明方法流程图;
图4为本发明源码与编译产物隔离后的目录结构示意图。
具体实施方式
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请技术领域的技术人员通常理解的含义相同;本文中在申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请;本申请的说明书和权利要求书及上述附图说明中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。本申请的说明书和权利要求书或上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
为了使本技术领域的人员更好地理解本申请方案,下面将结合附图,对本申请实施例中的技术方案进行清楚、完整地描述。
如图3所示,本发明编译产物与源码隔离的方法,包括如下步骤:
(1)在源码根目录下创建第一文件夹;
(2)在第一文件夹下创建与源码目录结构相同的目标文件,其中,目标文件中的非文件夹为指向源码对应文件的链接文件。
本例的第一文件夹的数量可以为1个或多个,每个第一文件夹并列设置在所述源码根目录下,相互独立,各个第一文件夹能够独立编译。
优选地,为了便于管理,本例步骤(2)中,本例的目标文件中,其目录结构与源码目录结构完全相同,并且其名称与源码对应文件完全相同,然后基于目标文件,进行编译开发。通过本发明可以很容易的编写一个shell脚本程序在执行编译动作之前进行该方法的执行。
通过上述可知,本发明只需要在原来的编译框架下做最小的改动来达到编译产物与源码的隔离的效果,不需要改变原有的编译习惯。
如图4所示,作为本发明的一个实施例,本例在根目录下,源码包括左侧的source和config两个文件夹及其文件夹中的文件,本发明在编译之前,完成以下工作内容:
1.目标文件建立:
在源码source和config文件夹的同一级建立buildir_arm、buildir_mips、buildir_x86三种不同产品的文件夹。
以buildir_arm文件夹为例,程序会在该文件夹下建立source/func_a、source/func_b、config/arm、config/mips、config/x86等共7个文件夹,然后在source/func_a下建立链接文件a1.c指向源码source/func_a/a1.c,source/func_b下建立链接文件b1.c指向源码source/func_b/b1.c,config/arm下建立链接文件arm.cfg指向源码中的config/arm/arm.cfg,config/mips下建立链接文件mips.cfg指向源码中的config/mips/mips.cfg,config/x86下建立链接文件x86.cfg指向源码中的config/x86/x86.cfg。
buildir_mips、buildir_x86两个文件夹的目标文件创建同buildir_arm,此处省略相关描述。第一文件夹的数量不局限与3个,可以按需要扩展。
2.编译目标文件
以buildir_arm为例:第1步完成之后然后在buildir_arm下执行原有的编译动作,这样所有的编译中间产物都会生成在buildir_arm下的各个子文件夹。如图4所示,a1.o、b1.o只会在buildir_arm/source/func_a和buildir_arm/source/func_b下生成,不会在源码的source/func_a和source/func_b下生成。这样就实现了编译产物与源码隔离的效果。
另外,由于buildir_arm/source/func_a/a1.c是指向源码source/func_a/a1.c的链接,不管是修改buildir_arm/source/func_a/a1.c,还是修改源码中的source/func_a/a1.c效果都是一样的,都是实现对源码文件进行修改,并且buildir_mips/source/func_a/a1.c和buildir_x86/source/func_a/a1.c下的文件也同时都得到了修改。
综上所述,只需要在执行编译之前执行一下本发明脚本程序即可达到编译产物与源码隔离的目的。如果源码的文件、文件夹比较多,可以尝试使用c/c++语言来实现第1步所述的脚本程序提高效率。
通过上述技术方案可知,本发明具有以下突出的有益效果:
1.使用了本发明之后,只需要对源代码做简单的适配,就可以做到编译产物和源码隔离。使得开发人员更加专注与源码的修改,而不会因为编译产物和源码混合在一起过多而给开发人员带来不必要的困扰;
2.使用了本发明之后,使得svn、git等的管理非常方便。以git管理方式为例:编写.gitignore的忽略规则会变得非常方便。这种情况下.gitignore的过滤规则只需要写“buildir_*”一条过滤规则即可;
3.应用本发明后,对于验证同一份代码在不同的目标板上编译、运行带来很大的便利。以图4使用隔离后的目录结构为例:用户只需在buildir_arm下执行编译,然后(也可以同时)在buildir_mips下执行编译便可以得到两种不同方案的程序;
4.本发明使得同一份代码下并行构建多个方案成为可能。如图4所示,本发明在一份代码的前提下,未使用本发明的时候arm mips x86三个方案的编译是串行的,而使用了本发明后arm mips x86三个方案的编译变为并行,并且三者能够分别相互独立运行,从而大大提高软件开发效率。
以上所述之具体实施方式为本发明的较佳实施方式,并非以此限定本发明的具体实施范围,本发明的范围包括并不限于本具体实施方式,凡依照本发明所作的等效变化均在本发明的保护范围内。
Claims (6)
1.一种编译产物与源码隔离的方法,其特征在于,包括如下步骤:
(1)在源码根目录下创建第一文件夹;
(2)在第一文件夹下创建与源码目录结构相同的目标文件,其中,目标文件中的非文件夹为指向源码对应文件的链接文件。
2.根据权利要求1所述的编译产物与源码隔离的方法,其特征在于:步骤(1)中,所述第一文件夹的数量为1个以上,每个第一文件夹并列设置在所述源码根目录下。
3.根据权利要求1所述的编译产物与源码隔离的方法,其特征在于:步骤(2)中,建立与源码目录结构相同且名称一一对应相同的目标文件。
4.根据权利要求3所述的编译产物与源码隔离的方法,其特征在于:所述目标文件创建方法为:判断源码是否为文件夹,如果是,则在第一文件夹下创建与源码文件夹级数相同的、相同名称的文件夹,如果否,则在第一文件夹下创建与源码文件级数相同、名称相同的链接文件,链接指向源码文件。
5.一种系统,用于实现权利要求1-4任一项所述的编译产物与源码隔离的方法,其特征在于,包括:
第一创建模块:用于在源码根目录下创建第一文件夹;
第二创建模块:用于在第一文件夹下创建与源码目录结构相同的目标文件,其中,目标文件中的非文件夹为指向源码对应文件的链接文件。
6.一种存储介质,所述存储介质存储有编译产物与源码隔离程序,所述编译产物与源码隔离程序被处理器调用时执行如权利要求1至4任意一项所述编译产物与源码隔离的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210199845.2A CN114546409A (zh) | 2022-03-01 | 2022-03-01 | 一种编译产物与源码隔离的方法、系统及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210199845.2A CN114546409A (zh) | 2022-03-01 | 2022-03-01 | 一种编译产物与源码隔离的方法、系统及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114546409A true CN114546409A (zh) | 2022-05-27 |
Family
ID=81661673
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210199845.2A Pending CN114546409A (zh) | 2022-03-01 | 2022-03-01 | 一种编译产物与源码隔离的方法、系统及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114546409A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114968411A (zh) * | 2022-06-15 | 2022-08-30 | 康键信息技术(深圳)有限公司 | 一种代码加载方法、装置、计算机设备和可读存储介质 |
-
2022
- 2022-03-01 CN CN202210199845.2A patent/CN114546409A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114968411A (zh) * | 2022-06-15 | 2022-08-30 | 康键信息技术(深圳)有限公司 | 一种代码加载方法、装置、计算机设备和可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8418155B2 (en) | Generating parallel SIMD code for an arbitrary target architecture | |
EP0709773B1 (en) | System and method for generating target language code utilizing an object oriented code generator | |
US11579856B2 (en) | Multi-chip compatible compiling method and device | |
EP0905617B1 (en) | Method for generating a java bytecode data flow graph | |
US9672133B2 (en) | Systems and methods for debugging applications using dual code generation | |
CN106933610B (zh) | 一种应用程序安装包生成方法、装置及电子设备 | |
US6961931B2 (en) | Dependency specification using target patterns | |
CN111770204B (zh) | 一种执行智能合约的方法、区块链节点和存储介质 | |
Miecznikowski et al. | Decompiling Java using staged encapsulation | |
CN110865814B (zh) | 一种支持异构计算核架构的编译器实现方法和系统 | |
CN114816417B (zh) | 一种交叉编译方法、装置、计算设备及存储介质 | |
CN100517222C (zh) | 支持转换引擎与映射规则相分离的模型转换装置及其方法 | |
CN110109671B (zh) | 一种webpack标签尺寸样式转换方法及装置 | |
CN102364433B (zh) | 在ARM处理器上实现Wine构建工具移植的方法 | |
US20220027139A1 (en) | Application program updating method, apparatus, system, medium and device | |
CN111770202B (zh) | 一种执行智能合约的方法、区块链节点和存储介质 | |
CN111768184A (zh) | 一种执行智能合约的方法及区块链节点 | |
CN111768183A (zh) | 一种执行智能合约的方法、区块链节点和存储介质 | |
CN102364442A (zh) | 将Wine从x86移植到ARM平台的方法 | |
US20090144709A1 (en) | Reducing stack space consumption via head-call optimization | |
CN114546409A (zh) | 一种编译产物与源码隔离的方法、系统及存储介质 | |
CN112181432A (zh) | ReactNative框架中实现bundle的模块化打包处理的系统 | |
CN108376074B (zh) | 一种基于嵌入式系统的RancherOS ros核心模块移植方法 | |
CN103176903A (zh) | MapReduce分布式系统程序的测试方法及设备 | |
CN115658140A (zh) | 一种sdk的打包方法、装置、终端以及存储介质 |
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 |