CN101859244A - 多工具链工程构建方法及*** - Google Patents
多工具链工程构建方法及*** Download PDFInfo
- Publication number
- CN101859244A CN101859244A CN200910081791A CN200910081791A CN101859244A CN 101859244 A CN101859244 A CN 101859244A CN 200910081791 A CN200910081791 A CN 200910081791A CN 200910081791 A CN200910081791 A CN 200910081791A CN 101859244 A CN101859244 A CN 101859244A
- Authority
- CN
- China
- Prior art keywords
- compiling
- toolchain
- chain
- instrument
- instrument chain
- 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
Landscapes
- Stored Programmes (AREA)
Abstract
本发明提供一种多工具链工程构建方法,该方法包括:创建批处理文件以及包含一个以上工具链中相同编译环境部分的主makefile文件;创建一个以上分别对应不同工具链的子makefile文件;主makefile文件根据在批处理文件中输入的工具链调用参数,选择调用相应的工具链,编译、输出可执行文件。本发明还提供了一种多工具链工程构建***,包括:入口模块、编译引擎模块以及编译模块。本发明的方法和***,能够实现多个编译环境的统一构建,在大大减轻维护的难度的同时,减小了软件开发人员的工作量。
Description
技术领域
本发明涉及软件开发技术,尤其涉及一种多工具链工程构建方法及***。
背景技术
目前,在软件程序开发领域,GNU的make工具提供了构建工程的支持,make工具最主要功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作,不过需要使用make工具的软件开发人员自行编写makefile文件。例如,对于手机软件开发平台,手机软件开发人员需要在多个编译环境下使用不同的编译工具链实现本地编译和交叉编译,也就需要编写、维护多个不同的makefile文件。举例来说,对于模拟环境和手机环境等,针对同一套程序代码,需要分别建立两个不同的工程,在一个工程中进行本地编译,生成本地二进制文件,在模拟环境中运行;在另一个工程中进行交叉编译,生成目标二进制文件,在手机环境中运行。
每个编译环境都提供不同的makefile文件,那么手机软件开发人员也就必须对所有相应编译环境的makefile文件进行维护,工作极其繁琐。若需要使用的编译环境增加,那么需要维护的makefile文件的数量将成倍增多,可维护性差,而且重复劳动量大。
发明内容
有鉴于此,本发明的主要目的在于提供一种多工具链工程构建方法及***,能够实现多个编译环境的统一构建。
为达到上述目的,本发明的技术方案是这样实现的:
本发明提供一种多工具链工程构建方法,包括:
创建批处理文件以及包含一个以上工具链中相同编译环境部分的主makefile文件;
创建一个以上分别对应不同工具链的子makefile文件;
主makefile文件根据在批处理文件中输入的工具链调用参数,选择调用相应的工具链,编译、输出可执行文件。
上述技术方案中,所述批处理文件设定有工具链的路径和变量。
所述相同编译环境部分包括需要编译的源文件信息。
所述子makefile文件包括工具链的定义以及编译规则。
所述工具链为GCC工具链、RVCT工具链和/或ADS编译工具链。
本发明还提供了一种多工具链工程构建***,包括入口模块、编译引擎模块以及编译模块;具体的:
入口模块,用于创建批处理文件,将输入的工具链调用参数发送至编译引擎模块;
编译引擎模块,用于创建包含一个以上工具链中相同编译环境部分的主makefile文件,根据入口模块发来的工具链调用参数,发送相应的编译环境加载指令给编译模块;
编译模块,用于创建分别对应各工具链的子makefile文件,根据编译引擎模块发来的指令,调用对应的工具链,编译、输出可执行文件。
上述技术方案中,所述批处理文件包括工具链的路径和变量。
所述相同编译环境部分包括需要编译的源文件信息。
所述子makefile文件包括工具链的定义以及编译规则。
所述工具链为GCC工具链、RVCT工具链和/或ADS编译工具链。
本发明的多工具链工程构建方法及***,通过创建包含不同工具链中相同编译环境部分的主makefile文件、以及用来定义工具链和规则的子makefile文件,统一构建多个编译环境工程,然后依靠编译引擎进行管理,使工程在不同的编译环境中统一构建,可方便地管理、切换编译环境。切换不同的工具链只需要改变批处理文件输入的工具链调用参数即可,增加或者维护不同的编译工具链只需要改变定义工具链和规则的子makefile文件即可,在大大减轻了维护的难度的同时,减小了软件开发人员的工作量。
附图说明
图1为本发明多工具链工程构建***结构示意图;
图2为本发明多工具链工程构建方法流程示意图;
图3为本发明实施例多工具链工程构建方法流程示意图。
具体实施方式
本发明的基本思想是:在安装有一个以上工具链的计算机***中,创建批处理文件和包含不同工具链中相同编译环境部分的主makefile文件、以及一个以上与不同工具链对应的子makefile文件;然后根据批处理文件中输入的工具链调用参数选择调用相应的子makefile文件对应的工具链,编译、输出相应的可执行文件。从而在一个工程中实现在不同编译环境下,使用相应的编译工具链编译出所需的不同的可执行文件。
其中,不同工具链的相同编译环境部分包括:工程的基本环境信息和需要编译的源文件信息,工具链的不同具体体现在两个方面:工具链的定义和编译规则。
图1为本发明多工具链工程构建***结构示意图,如图1所示,该***包括入口模块100、编译引擎模块110以及编译模块120;具体的:
入口模块100,用于创建批处理文件,将输入的工具链调用参数发送至编译引擎模块110;
编译引擎模块110,用于创建包含一个以上工具链中相同编译环境部分的主makefile文件,根据入口模块100发来的工具链调用参数,发送相应的编译环境加载指令给编译模块120;
编译模块120,用于创建分别对应各工具链的子makefile文件,根据编译引擎模块110发来的指令,调用相应的工具链,编译、输出可执行文件。
这里,所述批处理文件有三个作用:
1)负责定义编译前的编译环境的设定,比如设定有工具链的路径和变量;
2)负责接收输入的工具链调用参数;
3)调用主makefile文件进行工程构建。
所述主makefile文件有两个作用:
1)在主makefile程序中定义前面所描述的不同工具链中相同编译环境部分,例如,需要编译的源文件;
2)管理子makefile文件,即根据Start.bat定义的变量包含相应的子makefile文件。
所述子makefile文件的命名需要具有一定规则,这样在主makefile中才能正确包含引用。
同时,本发明还提供了一种多工具链工程构建方法,图2为本发明多工具链工程构建方法流程示意图,如图2所示,本发明方法包括:
步骤1、在安装有一个以上工具链的计算机***中,创建批处理文件,并创建包含一个以上工具链中相同编译环境部分的主makefile文件;
这里,所述工具链包括GCC工具链、RVCT工具链和/或ADS编译工具链。
步骤2、创建一个以上分别对应各工具链的子makefile文件;
步骤3、根据在批处理文件中输入的工具链调用参数,主makefile文件选择调用相应编译环境的工具链;
步骤4、在所选择的编译环境中使用对应的工具链编译、输出可执行文件。
下面结合具体实施例和附图对本发明的多工具链工程构建方法作进一步说明。
实施例
本实施例以手机软件开发为例,手机软件开发中构建模拟环境和手机环境时,一般要用到GCC和RVCT两条工具链。
图3为本发明实施例多工具链工程构建方法流程示意图,如图3所示,本发明方法包括:
步骤11、在安装有GCC工具链和RVCT工具链的计算机***中,创建批处理文件Start.bat;
步骤12、创建包含GCC工具链和RVCT工具链中相同编译环境部分的主makefile文件;
步骤13、创建分别对应GCC工具链和RVCT工具链的子makefile文件;
步骤14、根据在批处理文件Start.bat中输入的工具链调用参数,主makefile文件选择调用相应编译环境的工具链;
步骤15、在所选择的编译环境中使用对应的工具链编译、输出可执行文件。
步骤11中,创建批处理文件Start.bat,该批处理文件有三个作用:
1)负责定义编译前的编译环境的设定,例如,设定有GCC工具链和RVCT工具链的路径和变量;
2)负责接收输入的工具链调用参数,若输入SDK_COMPILER=GCC,则表示选择调用GCC工具链;
3)调用主makefile文件进行工程构建。
步骤12中,创建主makefile文件makefile-engine.mk,该文件有两个作用:
1)在主makefile程序中,定义前面所描述的不同工具链中相同编译环境部分,例如,需要编译的源文件;
2)管理子makefile文件,即根据Start.bat定义的变量包含相应的子makefile文件。例如,在主makefile中写入:
include makedefs_$(SDK_COMPILER).mk。
include makerules_$(SDK_COMPILER).mk。
如果SDK_COMPILER=GCC,说明选择调用GCC工具链,那么主makefile文件包含makedefs_gcc.mk和makerules_gcc.mk。这两个文件即是定义GCC工具链编译环境的子makefile。
步骤13中,创建子makefile文件makedefs_$(SDK_COMPILER).mk和makerules_$(SDK_COMPILER).mk。需要注意的是,子makefile文件的命名需要具有一定规则,这样在主makefile中才能正确包含引用。
本实施例中,在makedefs_gcc.mk和makerules_gcc.mk中定义GCC工具链的特有的编译环境,在makedefs_rvct.mk和makerules_rvct.mk中定义RVCT工具链的特有的编译环境。
对GCC工具链和RVCT工具链的切换只需在批处理文件Start.bat中输入不同的工具链调用参数,例如,输入Start.bat GCC,则根据makefile-engine.mk、makedefs_gcc.mk和makerules_gcc.mk文件调用GCC工具链对工程进行编译,最后编译、输出EXE文件,可以在计算机上模拟手机程序;而输入Start.bat RVCT,则根据makefile-engine.mk、makedefs_rvct.mk和makerules_rvct.mk文件调用RVCT工具链对工程进行编译,最后编译、输出ELF文件,可以上载到手机芯片中直接运行。这样,手机软件开发中的模拟环境和手机环境都可以在此框架上构建。以此类推,还可以增加其他编译环境,如ADS编译工具链,仅需要在编译引擎模块里面注册该编译环境,并增加该ADS编译工具对应的子makefile文件即可,修改和增加的代码都大大减少。
本发明的多工具链工程构建方法和***,对工程管理的维护只需维护相应的子makefile即可,大大降低了工程构建、管理的复杂度,有助于提高工程构建的集成度和复用性。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (10)
1.一种多工具链工程构建方法,其特征在于,该方法包括:
创建批处理文件以及包含一个以上工具链中相同编译环境部分的主makefile文件;
创建一个以上分别对应不同工具链的子makefile文件;
主makefile文件根据在批处理文件中输入的工具链调用参数,选择调用相应的工具链,编译、输出可执行文件。
2.根据权利要求1所述的多工具链工程构建方法,其特征在于,所述批处理文件设定有工具链的路径和变量。
3.根据权利要求2所述的多工具链工程构建方法,其特征在于,所述相同编译环境部分包括需要编译的源文件信息。
4.根据权利要求3所述的多工具链工程构建方法,其特征在于,所述子makefile文件包括工具链的定义以及编译规则。
5.根据权利要求1至4任一项所述的多工具链工程构建方法,其特征在于,所述工具链为GCC工具链、RVCT工具链和/或ADS编译工具链。
6.一种多工具链工程构建***,其特征在于,所述***包括入口模块、编译引擎模块以及编译模块;具体的:
入口模块,用于创建批处理文件,将输入的工具链调用参数发送至编译引擎模块;
编译引擎模块,用于创建包含一个以上工具链中相同编译环境部分的主makefile文件,根据入口模块发来的工具链调用参数,发送相应的编译环境加载指令给编译模块;
编译模块,用于创建分别对应各工具链的子makefile文件,根据编译引擎模块发来的指令,调用对应的工具链,编译、输出可执行文件。
7.根据权利要求6所述的多工具链工程构建***,其特征在于,所述批处理文件包括工具链的路径和变量。
8.根据权利要求7所述的多工具链工程构建***,其特征在于,所述相同编译环境部分包括需要编译的源文件信息。
9.根据权利要求8所述的多工具链工程构建***,其特征在于,所述子makefile文件包括工具链的定义以及编译规则。
10.根据权利要求6至9任一项所述的多工具链工程构建***,其特征在于,所述工具链为GCC工具链、RVCT工具链和/或ADS编译工具链。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910081791A CN101859244A (zh) | 2009-04-10 | 2009-04-10 | 多工具链工程构建方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910081791A CN101859244A (zh) | 2009-04-10 | 2009-04-10 | 多工具链工程构建方法及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101859244A true CN101859244A (zh) | 2010-10-13 |
Family
ID=42945170
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910081791A Pending CN101859244A (zh) | 2009-04-10 | 2009-04-10 | 多工具链工程构建方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101859244A (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799437A (zh) * | 2012-07-18 | 2012-11-28 | 清华大学 | 一种编译脚本自动生成方法和自动生成装置 |
CN102830981A (zh) * | 2012-09-12 | 2012-12-19 | 上海斐讯数据通信技术有限公司 | 一种用于嵌入式***软件开发工具的实现方法 |
CN103729227A (zh) * | 2014-01-27 | 2014-04-16 | 南车株洲电力机车研究所有限公司 | 一种out文件加载方法、装置及*** |
CN104572231A (zh) * | 2013-10-23 | 2015-04-29 | 航天信息股份有限公司 | 不同操作平台之间的工程移植方法和装置 |
CN105893105A (zh) * | 2016-03-29 | 2016-08-24 | 乐视控股(北京)有限公司 | 一种针对多个编译平台的编译***和方法 |
CN106843991A (zh) * | 2016-12-13 | 2017-06-13 | 北京元心科技有限公司 | 程序编译方法及*** |
CN107291436A (zh) * | 2016-04-13 | 2017-10-24 | 上海思立微电子科技有限公司 | Sdk包产生方法、装置及终端 |
CN107390111A (zh) * | 2017-06-22 | 2017-11-24 | 芯海科技(深圳)股份有限公司 | 一种ICNewProject自动化测试方法 |
CN109491661A (zh) * | 2018-10-24 | 2019-03-19 | 武汉思普崚技术有限公司 | 通用交叉编译方法及设备 |
CN111796831A (zh) * | 2020-06-24 | 2020-10-20 | 苏州大学 | 一种多芯片兼容的编译方法和装置 |
CN111984263A (zh) * | 2020-07-21 | 2020-11-24 | 百富计算机技术(深圳)有限公司 | 在第一***运行第二***应用的方法、装置、设备及介质 |
CN112506518A (zh) * | 2020-12-01 | 2021-03-16 | 东软睿驰汽车技术(沈阳)有限公司 | 基于配置文件的编译方法和装置 |
CN116521272A (zh) * | 2023-06-30 | 2023-08-01 | 睿思芯科(深圳)技术有限公司 | 自定义芯片的在线集成开发配置*** |
-
2009
- 2009-04-10 CN CN200910081791A patent/CN101859244A/zh active Pending
Cited By (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799437B (zh) * | 2012-07-18 | 2015-07-29 | 清华大学 | 一种编译脚本自动生成方法和自动生成装置 |
CN102799437A (zh) * | 2012-07-18 | 2012-11-28 | 清华大学 | 一种编译脚本自动生成方法和自动生成装置 |
CN102830981A (zh) * | 2012-09-12 | 2012-12-19 | 上海斐讯数据通信技术有限公司 | 一种用于嵌入式***软件开发工具的实现方法 |
CN102830981B (zh) * | 2012-09-12 | 2015-10-07 | 上海斐讯数据通信技术有限公司 | 一种用于嵌入式***软件开发工具的实现方法 |
CN104572231B (zh) * | 2013-10-23 | 2018-09-18 | 航天信息股份有限公司 | 不同操作平台之间的工程移植方法和装置 |
CN104572231A (zh) * | 2013-10-23 | 2015-04-29 | 航天信息股份有限公司 | 不同操作平台之间的工程移植方法和装置 |
CN103729227A (zh) * | 2014-01-27 | 2014-04-16 | 南车株洲电力机车研究所有限公司 | 一种out文件加载方法、装置及*** |
CN103729227B (zh) * | 2014-01-27 | 2017-05-24 | 南车株洲电力机车研究所有限公司 | 一种out文件加载方法、装置及*** |
CN105893105A (zh) * | 2016-03-29 | 2016-08-24 | 乐视控股(北京)有限公司 | 一种针对多个编译平台的编译***和方法 |
WO2017166529A1 (zh) * | 2016-03-29 | 2017-10-05 | 乐视控股(北京)有限公司 | 一种针对多个编译平台的编译***和方法 |
CN107291436A (zh) * | 2016-04-13 | 2017-10-24 | 上海思立微电子科技有限公司 | Sdk包产生方法、装置及终端 |
CN107291436B (zh) * | 2016-04-13 | 2020-11-27 | 上海思立微电子科技有限公司 | Sdk包产生方法、装置及终端 |
CN106843991A (zh) * | 2016-12-13 | 2017-06-13 | 北京元心科技有限公司 | 程序编译方法及*** |
CN107390111A (zh) * | 2017-06-22 | 2017-11-24 | 芯海科技(深圳)股份有限公司 | 一种ICNewProject自动化测试方法 |
CN109491661A (zh) * | 2018-10-24 | 2019-03-19 | 武汉思普崚技术有限公司 | 通用交叉编译方法及设备 |
CN109491661B (zh) * | 2018-10-24 | 2022-06-24 | 武汉思普崚技术有限公司 | 通用交叉编译方法及设备 |
CN111796831A (zh) * | 2020-06-24 | 2020-10-20 | 苏州大学 | 一种多芯片兼容的编译方法和装置 |
CN111796831B (zh) * | 2020-06-24 | 2023-02-28 | 苏州大学 | 一种多芯片兼容的编译方法和装置 |
CN111984263B (zh) * | 2020-07-21 | 2024-03-19 | 百富计算机技术(深圳)有限公司 | 在第一***运行第二***应用的方法、装置、设备及介质 |
CN111984263A (zh) * | 2020-07-21 | 2020-11-24 | 百富计算机技术(深圳)有限公司 | 在第一***运行第二***应用的方法、装置、设备及介质 |
WO2022017242A1 (zh) * | 2020-07-21 | 2022-01-27 | 百富计算机技术(深圳)有限公司 | 在第一***运行第二***应用的方法、装置、设备及介质 |
CN112506518A (zh) * | 2020-12-01 | 2021-03-16 | 东软睿驰汽车技术(沈阳)有限公司 | 基于配置文件的编译方法和装置 |
CN112506518B (zh) * | 2020-12-01 | 2023-07-14 | 东软睿驰汽车技术(沈阳)有限公司 | 基于配置文件的编译方法和装置 |
CN116521272A (zh) * | 2023-06-30 | 2023-08-01 | 睿思芯科(深圳)技术有限公司 | 自定义芯片的在线集成开发配置*** |
CN116521272B (zh) * | 2023-06-30 | 2024-01-12 | 睿思芯科(深圳)技术有限公司 | 自定义芯片的在线集成开发配置*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101859244A (zh) | 多工具链工程构建方法及*** | |
CN110870249A (zh) | 用于将高级语言代码编译为区块链平台上可执行的脚本的***和方法 | |
CN102830981B (zh) | 一种用于嵌入式***软件开发工具的实现方法 | |
CN101667134B (zh) | 一种构建编译***的方法及编译***构建装置 | |
Perchat et al. | Component based framework to create mobile cross-platform applications | |
CN103197942B (zh) | 一种补丁的生成方法、打补丁的方法及装置 | |
CN109976760A (zh) | 一种图形语言的交叉编译方法及交叉编译器 | |
CN103729184A (zh) | 一种软件组件组合构建方法 | |
CN102591777A (zh) | 一种单元测试代码生成方法及装置 | |
CN111309292B (zh) | 一种基于MATLAB/Simulink的全模型可执行程序构建方法 | |
CN105468428A (zh) | 一种安卓源代码编译方法及*** | |
CN111984245A (zh) | 一种区块链智能合约在线集成开发环境***及实现方法 | |
CN103645888A (zh) | 一种自动构建操作***的***及方法 | |
CN101266543A (zh) | 一种图形界面处理装置和方法 | |
CN102750177B (zh) | 一种使用编译器的脚本实现方法 | |
CN110781126A (zh) | 一种TensorFlow的FPGA异构加速实现方法、***、终端及存储介质 | |
CN111435312A (zh) | 应用程序管理方法、装置及电子设备 | |
CN103631585A (zh) | 一种用于开发应用程序的方法及*** | |
CN102622213A (zh) | 一种生成一键升级工具***及制作方法 | |
Kim et al. | Terra: Imperative-symbolic co-execution of imperative deep learning programs | |
Luder et al. | Formal models for the verification of IEC 61499 function block based control applications | |
Zhang et al. | Compiler Technologies in Deep Learning Co-Design: A Survey | |
CN111596923B (zh) | Haxe静态链接库构建方法、装置和电子设备 | |
Shu et al. | From models to code: automatic development process for embedded control system | |
CN101794229A (zh) | 一种Linux编译权限管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20101013 |