CN104866368B - 一种Makefile文件生成方法和装置 - Google Patents
一种Makefile文件生成方法和装置 Download PDFInfo
- Publication number
- CN104866368B CN104866368B CN201410806431.7A CN201410806431A CN104866368B CN 104866368 B CN104866368 B CN 104866368B CN 201410806431 A CN201410806431 A CN 201410806431A CN 104866368 B CN104866368 B CN 104866368B
- Authority
- CN
- China
- Prior art keywords
- design variables
- statement
- script
- file
- value
- 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.)
- Expired - Fee Related
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明提供一种Makefile文件生成方法和装置,所述Makefile文件包括对预设变量的定义语句以及调用所述预设变量的可执行语句,其中所述预设变量用于表示需要根据开发环境进行调整的内容,所述可执行语句用于表示编译规则;所述方法包括:获取输入数据,其包括所述预设变量的名称和取值,以及所述可执行语句;确定所述输入数据中的预设变量的名称和取值的对应关系;根据所述对应关系生成所述对预设变量的定义语句;将所述可执行语句置于所述对预设变量的定义语句之后形成所述Makefile文件。
Description
技术领域
本发明涉及应用程序编译技术。具体涉及一种Makefile文件生成方法和装置。
背景技术
应用程序中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile文件定义了一系列的编译规则来指定哪些文件需要先编译、哪些文件需要后编译、哪些文件需要重新编译,甚至于进行更复杂的功能操作,通过makefile文件可以编译各个源文件并连接生成应用程序的可执行文件。由此可见makefile文件的内容对于应用程序非常关键,并且其内容比较复杂。
平台化和可移植性一直是嵌入式系统软件开发商开发软件所追求的目标。例如:汽车整车控制器底层软件,希望其根据项目的不同进行配置就能够在不同的车型上得到应用。现有技术已经实现了驱动程序的可移植性,但却忽略了makefile文件的可移植性,导致在不同的开发阶段或不同的项目应用时都必须修改makefile文件相关内容,甚至将驱动程序移植到不同的平台时makefile文件需要重新编写,而这种修改或编写工作需要专业的技术人员耗费较多的时间成本来完成,由此则增大了驱动程序移植处理过程中的开发成本。
发明内容
为此,本发明所要解决的技术问题在于根据应用环境的需求,自动生成makefile文件。
本发明提供一种Makefile文件生成方法,所述Makefile文件包括对预设变量的定义语句以及调用所述预设变量的可执行语句,其中所述预设变量用于表示需要根据开发环境进行调整的内容,所述可执行语句用于表示编译规则;所述方法包括:获取输入数据,其包括所述预设变量的名称和取值,以及所述可执行语句;确定所述输入数据中的预设变量的名称和取值的对应关系;根据所述对应关系生成所述对预设变量的定义语句;将所述可执行语句置于所述对预设变量的定义语句之后形成所述Makefile文件。
优选地,所述预设变量的名称和取值位于配置文件中、所述可执行语句位于脚本文件中。
优选地,所述脚本文件包括:第一脚本语句,用于确定所述配置文件中所述预设变量的名称和取值的对应关系;第二脚本语句,用于确定所述可执行语句写入位置。
优选地,所述确定所述输入数据中的预设变量的名称和取值的对应关系包括:获取所述配置文件和所述脚本文件;利用所述脚本文件中的所述第一脚本语句确定所述配置文件中的所述预设变量的名称和取值的对应关系。
优选地,所述将所述可执行语句置于所述对预设变量的定义语句之后形成所述Makefile文件包括:获取所述脚本文件;利用所述脚本文件中的所述第二脚本语句将所述可执行语句置于所述对预设变量的定义语句之后形成所述Makefile文件。
相应地,本发明提供一种Makefile文件生成装置,所述Makefile文件包括对预设变量的定义语句以及调用所述预设变量的可执行语句,其中所述预设变量用于表示需要根据开发环境进行调整的内容,所述可执行语句用于表示编译规则;所述装置包括:获取单元,用于获取输入数据,其包括所述预设变量的名称和取值,以及所述可执行语句;变量赋值单元,用于确定所述输入数据中的预设变量的名称和取值的对应关系;定义语句生成单元,用于根据所述对应关系生成所述对预设变量的定义语句;编译规则写入单元,用于将所述可执行语句置于所述对预设变量的定义语句之后形成所述Makefile文件。
优选地,所述预设变量的名称和取值位于配置文件中、所述可执行语句位于脚本文件中。
优选地,所述脚本文件包括:第一脚本语句,用于确定所述配置文件中所述预设变量的名称和取值的对应关系;第二脚本语句,用于确定所述可执行语句写入位置。
优选地,所述变量赋值单元包括:第一获取子单元,用于获取所述配置文件和所述脚本文件;数据关系确定子单元,利用所述脚本文件中的所述第一脚本语句确定所述配置文件中的所述预设变量的名称和取值的对应关系。
优选地,第二获取子单元,用于获取所述脚本文件;语句写入子单元,用于利用所述脚本文件中的所述第二脚本语句将所述可执行语句置于所述对预设变量的定义语句之后形成所述Makefile文件。
与现有技术相比,本发明提供的Makefile文件生成方法和装置,可以根据输入数据生成变量定义部分,并写入调用该变量的可执行语句用于表示编译规则,以形成完整的Makefile文件,从而可以节约被编译程序的移植处理过程的人力成本,提高开发效率。
附图说明
为了使本发明的内容更容易被清楚的理解,下面根据本发明的具体实施例并结合附图,对本发明作进一步详细的说明,其中
图1是本发明第一实施例提供的Makefile文件生成方法的流程图;
图2是本发明第一实施例提供的Makefile文件生成方法中确定预设变量赋值的子流程图;
图3是本发明第一实施例提供的Makefile文件生成方法中写入可执行语句的子流程图;
图4是本发明第二实施例提供的Makefile文件生成装置的结构示意图。
具体实施方式
本发明第一实施例提供一种Makefile文件生成方法,所述Makefile文件包括对预设变量的定义语句以及调用所述预设变量的可执行语句,其中所述预设变量用于表示需要根据开发环境进行调整的内容,所述可执行语句用于表示编译规则。如图1所示,生成上述Makefile文件的方法包括:
S1:获取输入数据,其包括所述预设变量的名称和取值,以及所述可执行语句。其中,预设变量的名称和取值是根据被编译程序制定的,预设变量可以用于表示被编译程序中各个文件的路径、名称、编译选项、编译工具等多种需要根据开发环境进行调整的内容。例如,输入数据可以包括用于表示编译器的编译选项的变量CCOPT,以及取值gcc。
编译规则包括帮助规则、清除规则、生成.o文件规则等多种内容,其内容均是由若干可执行的语句组成的,所述可执行的语句是对所述预设变量的调用命令,例如是包括上述变量CCOPT的语句,也就是对被编译程序中各个文件的路径、名称、编译选项、编译工具等多种内容的调用命令。
S2:确定所述输入数据中的预设变量的名称和取值的对应关系。由于实际应用中的Makefile文件需要用到大量的变量,所以此时输入的数据中通常包括多个变量名称以及相应数量的变量取值,由此则需要确定每一个变量名称与取值的对应关系。现有技术中确定数据与待取值变量对应关系的方法有多种,例如可以利用可视化程序,其输入界面上可以有多个输入栏,每个输入栏对应一个待取值变量,本领域技术人员应当理解,利用现有方法都是可行的。经过此步骤处理后,即可确定上述变量CCOPT=gcc。
S3:根据所述对应关系生成所述对预设变量的定义语句,即在确定了上述变量名称与其取值后,即可生成符合特定计算机语言语法的变量定义语句,生成语句的方法可有多种,例如使用脚本语言等工具均可以实现该目的,本领域技术人员应当理解,利用现有的生成方法都是可行的。
S4:将所述可执行语句置于所述对预设变量的定义语句之后形成所述Makefile文件,
由此可见,最终生成的Makefile文件主要包括两部分:第一部分是变量定义部分,即对预设变量的定义语句;第二部分是编译规则部分,其内容是若干可执行语句。通过上述方案可以得知,上述第一部分为可变部分,第二部分为固定部分。
当需要针对不同的应用环境制作不同的Makefile文件时,只需要使用不同的输入数据,并加入调用所述预设变量的可执行语句即可生成不同的Makefile文件,即Makefile文件的预设变量定义部分(第一部分)是可变的,并且上述输入数据中的变量名称通常不需要进行修改,修改的只是预设变量的取值。Makefile文件的编译规则部分(第二部分)通常也是不需要改变的,即不需要对已经制定的所述可执行语句进行修改。当然,根据实际应用环境与项目需求,可以加入新的可执行语句,即新的编译规则。
根据本发明实施例提供的Makefile文件生成方法,可以根据输入数据生成变量定义部分,并写入调用该变量的可执行语句用于表示编译规则,以形成完整的Makefile文件,从而节约了被编译程序的移植处理过程的人力成本,提高了开发效率。
优选地,所述输入数据位于配置文件中、所述第一可执行语句位于脚本文件中。更优选地,所述脚本文件还包括:
第一脚本语句,用于确定所述配置文件中所述预设变量的名称和取值的对应关系;
第二脚本语句,用于确定所述可执行语句写入位置。
进一步优选地,如图2所示上述S2可以包括:
S21:获取所述配置文件和所述脚本文件。
S22:利用所述脚本文件中的所述第一脚本语句确定所述配置文件中的所述预设变量的名称和取值的对应关系。
如图3所示上述S4可以包括:
S41:获取所述脚本文件;
S42:利用所述脚本文件中的所述第二脚本语句将所述可执行语句置于所述对预设变量的定义语句之后形成所述Makefile文件。
上述配置文件例如可以是CSV(Comma-Separated Values,逗号分隔值)文件,该文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,并不需要例如二进制格式的被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔。上述输入数据可以作为CSV文件的字符序列,相应地,脚本文件只需将CSV文件作为输入文件,并通过脚本语句确定其中的字符排列顺序即可确定预设变量的名称与取值的对应关系。本领域技术人员应当理解,配置文件有多种,本发明并不限于使用CSV文件。
脚本文件是由若干脚本语句组成的,属于批次处理工具或工作控制工具,在本发明中脚本文件可以作为生成Makefile文件的工具,例如可以使用Perl(PracticalExtraction and Report Language,实用报表提取语言)编制的脚本文件,利用脚本文件可以确定预设变量的名称与取值的对应关系,还可以生成对预设变量的定义语句,同时可以确定可执行语句的写入位置,从而生成最终的Makefile文件。本领域技术人员应当理解,脚本文件有多种,本发明并不限于使用Perl编制的脚本文件。
利用脚本文件作为生成Makefile文件的工具,可以简化开发、部署的周期过程,其中大多数脚本语言都能够随时部署,而不需要耗时的编译与打包过程,可以进一步提高开发效率。并且相比其他开发工具,脚本语言具有一定的易用性,因此还可以进一步节约人力开发成本。
本发明第二实施例提供一种Makefile文件生成装置,所述Makefile文件包括对预设变量的定义语句以及调用所述预设变量的可执行语句,其中所述预设变量用于表示需要根据开发环境进行调整的内容,所述可执行语句用于表示编译规则。如图4所示,该装置包括:
获取单元41,用于获取输入数据,其包括所述预设变量的名称和取值,以及所述可执行语句;
变量赋值单元42,用于确定所述输入数据中的预设变量的名称和取值的对应关系;
定义语句生成单元43,用于根据所述对应关系生成所述对预设变量的定义语句;
编译规则写入单元44,用于将所述可执行语句置于所述对预设变量的定义语句之后形成所述Makefile文件。
本发明实施例提供的Makefile文件生成装置可以根据输入数据生成变量定义部分,并写入调用该变量的可执行语句用于表示编译规则,以形成完整的Makefile文件,利用上述Makefile文件生成装置生成Makefile文件可以节约被编译程序的移植处理过程的人力成本,提高开发效率。
优选地,所述输入数据位于配置文件中、所述第一可执行语句位于脚本文件中。
更优选地,所述脚本文件包括:
第一脚本语句,用于确定所述配置文件中所述预设变量的名称和取值的对应关系;
第二脚本语句,用于确定所述可执行语句写入位置。
进一步优选地,变量赋值单元42包括:
第一获取子单元,用于获取所述配置文件和所述脚本文件;
数据关系确定子单元,利用所述脚本文件中的所述第一脚本语句确定所述配置文件中的所述预设变量的名称和取值的对应关系。
所述编译规则写入单元44包括:
第二获取子单元,用于获取所述脚本文件;
语句写入子单元,用于利用所述脚本文件中的所述第二脚本语句将所述可执行语句置于所述对预设变量的定义语句之后形成所述Makefile文件。
利用脚本文件作为生成Makefile文件的工具,可以简化开发、部署的周期过程,其中大多数脚本语言都能够随时部署,而不需要耗时的编译与打包过程,可以进一步提高开发效率。并且相比其他开发工具,脚本语言具有一定的易用性,因此还可以进一步节约人力开发成本。
显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本发明创造的保护范围之中。
Claims (10)
1.一种Makefile文件生成方法,其特征在于,所述Makefile文件包括对预设变量的定义语句以及调用所述预设变量的可执行语句,其中所述预设变量用于表示需要根据开发环境进行调整的内容,所述可执行语句用于表示编译规则;所述方法包括:
获取输入数据,其包括所述预设变量的名称和取值,以及所述可执行语句;
确定所述输入数据中的预设变量的名称和取值的对应关系;
根据所述对应关系生成所述对预设变量的定义语句;
将所述可执行语句置于所述对预设变量的定义语句之后形成所述Makefile文件。
2.根据权利要求1所述的方法,其特征在于,所述预设变量的名称和取值位于配置文件中、所述可执行语句位于脚本文件中。
3.根据权利要求2所述的方法,其特征在于,所述脚本文件包括:
第一脚本语句,用于确定所述配置文件中所述预设变量的名称和取值的对应关系;
第二脚本语句,用于确定所述可执行语句写入位置。
4.根据权利要求3所述的方法,其特征在于,所述确定所述输入数据中的预设变量的名称和取值的对应关系包括:
获取所述配置文件和所述脚本文件;
利用所述脚本文件中的所述第一脚本语句确定所述配置文件中的所述预设变量的名称和取值的对应关系。
5.根据权利要求3所述的方法,其特征在于,所述将所述可执行语句置于所述对预设变量的定义语句之后形成所述Makefile文件包括:
获取所述脚本文件;
利用所述脚本文件中的所述第二脚本语句将所述可执行语句置于所述对预设变量的定义语句之后形成所述Makefile文件。
6.一种Makefile文件生成装置,其特征在于,所述Makefile文件包括对预设变量的定义语句以及调用所述预设变量的可执行语句,其中所述预设变量用于表示需要根据开发环境进行调整的内容,所述可执行语句用于表示编译规则;所述装置包括:
获取单元,用于获取输入数据,其包括所述预设变量的名称和取值,以及所述可执行语句;
变量赋值单元,用于确定所述输入数据中的预设变量的名称和取值的对应关系;
定义语句生成单元,用于根据所述对应关系生成所述对预设变量的定义语句;
编译规则写入单元,用于将所述可执行语句置于所述对预设变量的定义语句之后形成所述Makefile文件。
7.根据权利要求6所述的装置,其特征在于,所述预设变量的名称和取值位于配置文件中、所述可执行语句位于脚本文件中。
8.根据权利要求7所述的装置,其特征在于,所述脚本文件包括:
第一脚本语句,用于确定所述配置文件中所述预设变量的名称和取值的对应关系;
第二脚本语句,用于确定所述可执行语句写入位置。
9.根据权利要求8所述的装置,其特征在于,所述变量赋值单元包括:
第一获取子单元,用于获取所述配置文件和所述脚本文件;
数据关系确定子单元,利用所述脚本文件中的所述第一脚本语句确定所述配置文件中的所述预设变量的名称和取值的对应关系。
10.根据权利要求8所述的装置,其特征在于,所述编译规则写入单元包括:
第二获取子单元,用于获取所述脚本文件;
语句写入子单元,用于利用所述脚本文件中的所述第二脚本语句将所述可执行语句置于所述对预设变量的定义语句之后形成所述Makefile文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410806431.7A CN104866368B (zh) | 2014-12-19 | 2014-12-19 | 一种Makefile文件生成方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410806431.7A CN104866368B (zh) | 2014-12-19 | 2014-12-19 | 一种Makefile文件生成方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104866368A CN104866368A (zh) | 2015-08-26 |
CN104866368B true CN104866368B (zh) | 2018-08-28 |
Family
ID=53912217
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410806431.7A Expired - Fee Related CN104866368B (zh) | 2014-12-19 | 2014-12-19 | 一种Makefile文件生成方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104866368B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111857725A (zh) * | 2020-07-17 | 2020-10-30 | 山东云海国创云计算装备产业创新中心有限公司 | 一种Makefile文件生成方法、装置、设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101697125A (zh) * | 2009-11-04 | 2010-04-21 | 中兴通讯股份有限公司 | 一种开发环境转换的方法及装置 |
CN101697135A (zh) * | 2009-10-28 | 2010-04-21 | 北京东方网力科技有限公司 | 一种编译程序的方法及装置 |
CN103279356A (zh) * | 2013-06-04 | 2013-09-04 | 百度在线网络技术(北京)有限公司 | Makefile文件的自动生成方法和装置 |
CN103870262A (zh) * | 2012-12-14 | 2014-06-18 | 北汽福田汽车股份有限公司 | 一种基于shell脚本的变量自动生成方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040194022A1 (en) * | 2003-03-28 | 2004-09-30 | Christophe Cleraux | Kernel configuration tool |
-
2014
- 2014-12-19 CN CN201410806431.7A patent/CN104866368B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101697135A (zh) * | 2009-10-28 | 2010-04-21 | 北京东方网力科技有限公司 | 一种编译程序的方法及装置 |
CN101697125A (zh) * | 2009-11-04 | 2010-04-21 | 中兴通讯股份有限公司 | 一种开发环境转换的方法及装置 |
CN103870262A (zh) * | 2012-12-14 | 2014-06-18 | 北汽福田汽车股份有限公司 | 一种基于shell脚本的变量自动生成方法及装置 |
CN103279356A (zh) * | 2013-06-04 | 2013-09-04 | 百度在线网络技术(北京)有限公司 | Makefile文件的自动生成方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104866368A (zh) | 2015-08-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Hölldobler et al. | Software language engineering in the large: towards composing and deriving languages | |
CN107943691B (zh) | 一种自动产生智能合约的功能测试页面的方法及装置 | |
CN106598556A (zh) | 用户界面生成方法及装置 | |
CN104317589A (zh) | 一种用于加载动态链接库的代码自动生成方法及装置 | |
CN103838584B (zh) | 一种移动终端应用的开发方法及装置 | |
CN103500087A (zh) | 一种基于maven插件和freemarker模版的代码生成方法及装置 | |
CN105512304A (zh) | 在线生成互联网应用方法和系统集成方法及支撑平台 | |
CN105528287A (zh) | 用于代码的单元测试的装置及方法 | |
CN103443765A (zh) | 自适应混淆的虚拟机 | |
CN103744684A (zh) | 一种异构软硬件协同开发的方法及系统 | |
CN110569628A (zh) | 一种代码的混淆方法以及装置、计算机设备、存储介质 | |
CN104991810B (zh) | 自动添加apk到安卓系统中的方法及处理系统 | |
CN110457044A (zh) | Haxe应用程序的编译方法、装置及电子设备 | |
CN104102581A (zh) | 一种实现单元测试的方法及装置 | |
CN105224347B (zh) | 数据配置方法及装置 | |
US20210389977A1 (en) | System migration support apparatus, system migration support method and program | |
CN104866368B (zh) | 一种Makefile文件生成方法和装置 | |
JP2018502391A (ja) | ユーザインタフェースを表示するためのコンピュータ実装方法 | |
Fischer et al. | Abstract syntax trees-and their role in model driven software development | |
CN106815022A (zh) | 一种基于树型数据结构的通用ui界面生成方法及装置 | |
CN107340995A (zh) | 一种牵引控制应用软件开发系统 | |
CN104484156A (zh) | 多语言公式的编辑方法、编辑系统和多语言公式编辑器 | |
Lelandais et al. | Fostering metamodels and grammars within a dedicated environment for HPC: the NabLab environment (tool demo) | |
CN106649095A (zh) | 一种面向目标代码的程序静态分析系统 | |
CN106610898B (zh) | 一种基于JPF的Java代码SSA单路径的生成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20180425 Address after: No. 188, Miyun District, Miyun District, Beijing, Beijing Applicant after: Beijing treasure Car Co.,Ltd. Address before: 102206, Beijing, Shahe Town, Changping District Road, sand Yang Applicant before: BEIQI FOTON MOTOR Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180828 Termination date: 20211219 |
|
CF01 | Termination of patent right due to non-payment of annual fee |