CN106843991A - 程序编译方法及系统 - Google Patents
程序编译方法及系统 Download PDFInfo
- Publication number
- CN106843991A CN106843991A CN201611143652.6A CN201611143652A CN106843991A CN 106843991 A CN106843991 A CN 106843991A CN 201611143652 A CN201611143652 A CN 201611143652A CN 106843991 A CN106843991 A CN 106843991A
- Authority
- CN
- China
- Prior art keywords
- tools chain
- compiling
- ide
- program
- response
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Abstract
本申请公开了程序编译方法及系统,其中所述方法包括:响应于在集成开发环境IDE中加载一程序,解析所述程序的配置文件;根据解析结果确定编译所述程序需要的工具链;响应于决定编译所述程序,确定所述工具链是否已经部署过;响应于所述工具链尚未部署,从与所述IDE分离的位置部署所述工具链形成用于对所述程序进行编译的平台编译环境。本发明能够自动搭建平台编译环境,一键就可以编译,提高了用户体验和效率。
Description
技术领域
本申请涉及电数字数据处理领域,尤其涉及程序编译方法及系统。
背景技术
当在PC端编译手机端或嵌入式端的程序时,需要用到交叉编译环境。交叉编译的方式大多在命令行下完成。其步骤一般都较为繁琐。例如,首先需要用户根据程序工程构建方式,进入交叉编译环境,找对应工具编译,然后再根据需求打成相应的二进制包。如果遇到调试的情况,其在命令行下的调试体验非常不好,不够直观。大部分写程序的人都把时间用在怎样去寻找如何编译这个程序、如何打包的方面上了,而不是把精力放在写程序上,这对于公司和写代码的人来说,都是一种浪费。
发明内容
为了克服现有技术中存在的不足,本发明要解决的技术问题是提供一种程序编译方法及系统,其能自动搭建编译环境,使得程序员不用关注编译过程,只需关注写代码就行,提高了用户体验和效率。
为解决上述技术问题,本发明的程序编译方法,包括:
响应于在集成开发环境IDE中加载一程序,解析所述程序的配置文件;
根据解析结果确定编译所述程序需要的工具链;
响应于决定编译所述程序,确定所述工具链是否已经部署过;
响应于所述工具链尚未部署,从与所述IDE分离的位置部署所述工具链形成用于对所述程序进行编译的平台编译环境。
作为本发明所述方法的改进,所述方法还包括:响应于所述工具链已经部署过,使用已经部署的工具链形成的平台编译环境用于所述程序的编译。
作为本发明所述方法的另一种改进,所述响应于所述工具链尚未部署,从与所述IDE分离的位置部署所述工具链形成平台编译环境的步骤包括:将所述工具链部署到所述IDE所在计算机与之通信的服务器上。
作为本发明所述方法的又一种改进,所述方法还包括:提供支持的工具链列表供选择。
作为本发明所述方法的进一步的改进,所述方法还包括:响应于在IDE中新建一个工程,根据从所述工具链列表选择的工具链自动部署所选工具链。
为解决上述技术问题,本发明的程序编译系统,包括:
解析模块,用于响应于在集成开发环境IDE中加载一程序,解析所述程序的配置文件;
工具链确定模块,用于根据解析结果确定编译所述程序需要的工具链;
部署确定模块,用于响应于决定编译所述程序,确定所述工具链是否已经部署过;
部署模块,用于响应于所述工具链尚未部署,从与所述IDE分离的位置部署所述工具链形成用于对所述程序进行编译的平台编译环境。
为解决上述技术问题,本发明的有形计算机可读介质,包括用于执行程序编译方法的计算机程序代码,所述计算机程序代码包括用于响应于在集成开发环境IDE中加载一程序,解析所述程序的配置文件的可执行代码;用于根据解析结果确定编译所述程序需要的工具链的可执行代码;用于响应于决定编译所述程序,确定所述工具链是否已经部署过的可执行代码;用于响应于所述工具链尚未部署,从与所述IDE分离的位置部署所述工具链形成用于对所述程序进行编译的平台编译环境的可执行代码。
为解决上述技术问题,本发明提供一种装置,包括至少一个处理器;及至少一个存储器,含有计算机程序代码,所述至少一个存储器和所述计算机程序代码被配置为利用所述至少一个处理器使得所述装置执行本发明的程序编译方法的至少部分步骤。
按照本发明,无论什么工程管理的程序,例如cmake、autotools、qmake等,IDE都能自动读取这些程序,根据程序的配置文件,自动搭建平台编译环境,一键就可以编译。如若调试代码,直接用IDE调试,也更为直观。将平台编译环境集成到IDE中,提高了用户体验,另外,使得编译过程简化,一键可以编译任意工程管理的程序。
结合附图阅读本发明实施方式的详细描述后,本发明的其它特点和优点将变得更加清楚。
附图说明
图1为根据本发明方法的一实施例的流程图。
图2为根据本发明系统的一实施例的结构示意图。
为清晰起见,这些附图均为示意性及简化的图,它们只给出了对于理解本发明所必要的细节,而省略其他细节。
具体实施方式
下面参照附图对本发明的实施方式和实施例进行详细说明。
通过下面给出的详细描述,本发明的适用范围将显而易见。然而,应当理解,在详细描述和具体例子表明本发明优选实施例的同时,它们仅为说明目的给出。
图1示出了根据本发明的程序编译方法的一实施例的流程图。关于平台编译的基础包,如何集成到IDE中?其方案是,当用户拿到我们的IDE后,会直接进行安装,在安装完后,待用户第一次使用编译功能时,会弹出提示,用户是否安装平台编译基础包,并选择路径,若不选择安装,则无法使用本IDE。若选择,不选安装路径,则在默认路径下安装基础包(其默认路径为当前IDE安装的同一目录下)。安装有两种方式:若选择在线安装,则直接会连接IDE里面设置好的服务器,进行下载安装;若选择本地安装,则会扫描用户目录下是否有这个安装包,然后进行安装。仅将平台编译环境的基础共用包集成到IDE中,可防止IDE太过庞大,影响用户体验。平台编译基础包是一个小型的文件系统,在里面它会启动一个服务。待安装好后,就会启动这个服务,这个服务实现本发明的方法。
下面结合图1所示流程图对根据本发明的程序编译方法的一实施例的各步骤进行具体说明。
在步骤S102中,如果在IDE中打开或加载一个由qmake管理的工程代码(这个工程需要使用qmake工具来编译程序),自动去解析这个工程的配置文件,看需要生成什么平台编译环境。
在步骤S104中,根据解析结果确定编译所述工程代码需要的工具链。工具链是指类似于gcc、g++、make、cmake、qmake或者该工程代码在工程配置文件中额外要求的工具,例如expect等这一系列的工具组成的工具链。
在步骤S106中,弹出一个对话框,提示用户是否需要编译这个工程代码。如果用户选择“是”,则处理进行到步骤S108;否则,关闭提示窗口。也可能在提示用户的同时列出支持的编译工具链,如cmake、qmake、autotools等,如果用户选择的不仅仅是qmake,还需要其他的工具链,待它勾选时,后台服务在下面的步骤S110中会开辟多个线程去进行安装部署。
在步骤S108中,当用户决定编译所述工程代码时,响应于所述程序,确定所需要的工具链是否已经部署过。如果判断结果为“否”,则处理进行到步骤S110;否则,处理进行到步骤S120。
在步骤S110中,从服务器上去下载对应的编译工具链进行安装,形成用于所述工程代码编译的平台编译环境。当然,如果用户无法连接外网,也可以将相关工具链安装包,放到用户目录下,基础包中启动的服务会自动去扫描用户目录,进行安装部署。
在步骤S120中,当确定用户已经部署过qmake类型的工具链后,不用再次进行部署,直接使用已经部署过的qmake工具链形成的平台编译环境用于所述工程代码的编译。
本发明使得用户安装本IDE时,非常小巧,因为编译环境没包含在其中。另外后台编译环境是动态分析的,且支持的编译工程相当广泛,只要IDE中指定的服务器上有对应的编译工具链,其基础包上启动的服务都能去分析并安装部署,这样就可以支持编译任何工程管理的程序,生成任何平台的代码。此外,这个过程都是后台自动完成的,用户不用刻意去关心这些东西。例如,用户打开一个cmake管理的工程,但是他不懂cmake,他只需要在IDE弹出的提示对话框上,点击确认需要编译该程序,则后台服务会自动去部署相关工具链。
根据本发明方法的一种实施方式,所述响应于所述工具链尚未部署,从与所述IDE分离的位置部署所述工具链形成平台编译环境的步骤包括:将所述工具链部署到所述IDE所在计算机与之通信的服务器上。
如若感觉平台编译环境占本地磁盘空间或者对于本地空间不够的情况,可以选择部署在服务器上。例如,用户可勾选部署在服务器这个选项,服务器目的地由用户来设定(输入服务器的IP地址以及用户名,密码),则基础包中启动的服务,会自动将这段代码传到指定的服务器上,并在指定的服务器上部署编译环境。用户在本地用IDE看代码,一键调服务器资源编译和调试。不仅可以节省本地磁盘空间,由于服务器的高性能,还可加快编译速度。
根据本发明方法的另一种实施方式,所述方法还包括:提供支持的工具链列表供选择;响应于在IDE中新建一个工程,根据从所述工具链列表选择的工具链自动部署所选工具链。
当新建一个工程时,用户直接选择对应的工具链就行了,例如qmake管理工程、cmake管理工程等,后台会自动部署这些需要的工具链。
根据本发明的又一种实施方式,当打开一个工程代码,没有任何工程管理文件时,用户只需要选择这个工程的文件夹,例如创建一个文件夹helloworld,里面写一个文件Helloworld.c,没有其他的一些qmake、cmake等配置文件。那么用户只需要选择“打开”,选择helloworld这个文件夹,此时,可提示用户需要什么类型的工程管理文件,若用户不选择,则默认生成一个qmake工程管理文件。
综上,本发明将平台编译环境集成到IDE中,提高了用户体验,另外,使得编译过程简化,一键可以编译任意工程管理的程序。其次,这个平台编译环境可以部署在服务器端,不仅可以节省本地磁盘空间,由于服务器的高性能,还可加快编译速度。最后,该平台编译环境是动态增长的,不仅可以编译普通二进制程序,而且可以支持服务程序和内核、驱动程序等。
图2示出了根据本发明的程序编译系统的一实施例的结构示意图图,该系统包括:解析模块210,用于响应于在集成开发环境IDE中加载一程序,解析所述程序的配置文件;工具链确定模块220,用于根据解析结果确定编译所述程序需要的工具链;选择提供模块230,用于提供支持的工具链列表供选择;部署确定模块240,用于响应于决定编译所述程序,确定所述工具链是否已经部署过;部署模块250,用于响应于所述工具链尚未部署,从与所述IDE分离的位置部署所述工具链形成用于对所述程序进行编译的平台编译环境;使用模块260,用于响应于所述工具链已经部署过,使用已经部署的工具链形成的平台编译环境对所述程序进行编译。
根据本发明系统的一种实施方式,所述部署模块用于将所述工具链部署到所述IDE所在计算机与之通信的服务器上。
根据本发明系统的另一种实施方式,所述系统还包括:新建模块,用于响应于在IDE中新建一个工程,根据从所述工具链列表选择的工具链自动部署所选工具链。
在此所述的多个不同实施例或者其特定特征、结构或特性可在本发明的一个或多个实施方式中适当组合。另外,在某些情形下,只要适当,流程图中和/或流水处理描述的步骤顺序可修改,并不必须精确按照所描述的顺序执行。另外,本发明的多个不同方面可使用软件、硬件、固件或者其组合和/或执行所述功能的其它计算机实施的模块或装置进行实施。本发明的软件实施可包括保存在计算机可读介质中并由一个或多个处理器执行的可执行代码。计算机可读介质可包括计算机硬盘驱动器、ROM、RAM、闪存、便携计算机存储介质如CD-ROM、DVD-ROM、闪盘驱动器和/或例如具有通用串行总线(USB)接口的其它装置,和/或任何其它适当的有形或非短暂计算机可读介质或可执行代码可保存于其上并由处理器执行的计算机存储器。本发明可结合任何适当的操作系统使用。
除非明确指出,在此所用的单数形式“一”、“该”均包括复数含义(即具有“至少一”的意思)。应当进一步理解,说明书中使用的术语“具有”、“包括”和/或“包含”表明存在所述的特征、步骤、操作、元件和/或部件,但不排除存在或增加一个或多个其他特征、步骤、操作、元件、部件和/或其组合。如在此所用的术语“和/或”包括一个或多个列举的相关项目的任何及所有组合。
前面说明了本发明的一些优选实施例,但是应当强调的是,本发明不局限于这些实施例,而是可以本发明主题范围内的其它方式实现。本领域技术人员可以在本发明技术构思的启发和不脱离本发明内容的基础上对本发明作出各种变形和修改,这些变形或修改仍落入本发明的保护范围之内。
Claims (10)
1.一种程序编译方法,其特征在于,所述方法包括:
响应于在集成开发环境IDE中加载一程序,解析所述程序的配置文件;
根据解析结果确定编译所述程序需要的工具链;
响应于决定编译所述程序,确定所述工具链是否已经部署过;
响应于所述工具链尚未部署,从与所述IDE分离的位置部署所述工具链形成用于对所述程序进行编译的平台编译环境。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于所述工具链已经部署过,使用已经部署的工具链形成的平台编译环境用于所述程序的编译。
3.根据权利要求1所述的方法,其特征在于,所述响应于所述工具链尚未部署,从与所述IDE分离的位置部署所述工具链形成平台编译环境的步骤包括:
将所述工具链部署到所述IDE所在计算机与之通信的服务器上。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
提供支持的工具链列表供选择。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
响应于在IDE中新建一个工程,根据从所述工具链列表选择的工具链自动部署所选工具链。
6.一种程序编译系统,其特征在于,所述系统包括:
解析模块,用于响应于在集成开发环境IDE中加载一程序,解析所述程序的配置文件;
工具链确定模块,用于根据解析结果确定编译所述程序需要的工具链;
部署确定模块,用于响应于决定编译所述程序,确定所述工具链是否已经部署过;
部署模块,用于响应于所述工具链尚未部署,从与所述IDE分离的位置部署所述工具链形成用于对所述程序进行编译的平台编译环境。
7.根据权利要求6所述的系统,其特征在于,所述系统还包括:
使用模块,用于响应于所述工具链已经部署过,使用已经部署的工具链形成的平台编译环境用于所述程序的编译。
8.根据权利要求6所述的系统,其特征在于,所述部署模块用于将所述工具链部署到所述IDE所在计算机与之通信的服务器上。
9.根据权利要求6所述的系统,其特征在于,所述系统还包括:
选择提供模块,用于提供支持的工具链列表供选择。
10.根据权利要求9所述的系统,其特征在于,所述系统还包括:
新建模块,用于响应于在IDE中新建一个工程,根据从所述工具链列表选择的工具链自动部署所选工具链。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611143652.6A CN106843991A (zh) | 2016-12-13 | 2016-12-13 | 程序编译方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611143652.6A CN106843991A (zh) | 2016-12-13 | 2016-12-13 | 程序编译方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106843991A true CN106843991A (zh) | 2017-06-13 |
Family
ID=59139264
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611143652.6A Pending CN106843991A (zh) | 2016-12-13 | 2016-12-13 | 程序编译方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106843991A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107741851A (zh) * | 2017-10-12 | 2018-02-27 | 北京元心科技有限公司 | 编译系统的编译方法、装置及终端设备 |
CN107943485A (zh) * | 2017-12-11 | 2018-04-20 | 北京奇虎科技有限公司 | 一种补丁编译平台及补丁编译方法 |
CN109918080A (zh) * | 2019-02-25 | 2019-06-21 | 深圳市创联时代科技有限公司 | 一种配置工具链的方法 |
CN109992257A (zh) * | 2019-03-28 | 2019-07-09 | 深圳市创联时代科技有限公司 | 一种自动编译库的方法 |
CN112015428A (zh) * | 2020-08-21 | 2020-12-01 | 广州欢网科技有限责任公司 | 编译环境创建方法、装置及主机 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1725177A (zh) * | 2004-07-21 | 2006-01-25 | 中国科学院软件研究所 | 嵌入式设备集成开发系统及其使用方法 |
CN101122866A (zh) * | 2007-09-12 | 2008-02-13 | 中兴通讯股份有限公司 | 集成开发环境中的程序代码编译方法 |
CN101859244A (zh) * | 2009-04-10 | 2010-10-13 | 中兴通讯股份有限公司 | 多工具链工程构建方法及系统 |
CN102609354A (zh) * | 2012-01-19 | 2012-07-25 | 北京神州数码思特奇信息技术股份有限公司 | 一种基于gnu开源软件的c++程序远程调试方法 |
CN103645888A (zh) * | 2013-10-25 | 2014-03-19 | 普华基础软件股份有限公司 | 一种自动构建操作系统的系统及方法 |
CN103853589A (zh) * | 2014-02-26 | 2014-06-11 | 上海爱数软件有限公司 | 一种跨平台的系统编译构建方法 |
CN104793946A (zh) * | 2015-04-27 | 2015-07-22 | 广州杰赛科技股份有限公司 | 基于云计算平台的应用部署方法和系统 |
-
2016
- 2016-12-13 CN CN201611143652.6A patent/CN106843991A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1725177A (zh) * | 2004-07-21 | 2006-01-25 | 中国科学院软件研究所 | 嵌入式设备集成开发系统及其使用方法 |
CN101122866A (zh) * | 2007-09-12 | 2008-02-13 | 中兴通讯股份有限公司 | 集成开发环境中的程序代码编译方法 |
CN101859244A (zh) * | 2009-04-10 | 2010-10-13 | 中兴通讯股份有限公司 | 多工具链工程构建方法及系统 |
CN102609354A (zh) * | 2012-01-19 | 2012-07-25 | 北京神州数码思特奇信息技术股份有限公司 | 一种基于gnu开源软件的c++程序远程调试方法 |
CN103645888A (zh) * | 2013-10-25 | 2014-03-19 | 普华基础软件股份有限公司 | 一种自动构建操作系统的系统及方法 |
CN103853589A (zh) * | 2014-02-26 | 2014-06-11 | 上海爱数软件有限公司 | 一种跨平台的系统编译构建方法 |
CN104793946A (zh) * | 2015-04-27 | 2015-07-22 | 广州杰赛科技股份有限公司 | 基于云计算平台的应用部署方法和系统 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107741851A (zh) * | 2017-10-12 | 2018-02-27 | 北京元心科技有限公司 | 编译系统的编译方法、装置及终端设备 |
CN107943485A (zh) * | 2017-12-11 | 2018-04-20 | 北京奇虎科技有限公司 | 一种补丁编译平台及补丁编译方法 |
CN107943485B (zh) * | 2017-12-11 | 2021-07-20 | 北京奇虎科技有限公司 | 一种补丁编译平台及补丁编译方法 |
CN109918080A (zh) * | 2019-02-25 | 2019-06-21 | 深圳市创联时代科技有限公司 | 一种配置工具链的方法 |
CN109992257A (zh) * | 2019-03-28 | 2019-07-09 | 深圳市创联时代科技有限公司 | 一种自动编译库的方法 |
CN109992257B (zh) * | 2019-03-28 | 2022-12-06 | 深圳市创联时代科技有限公司 | 一种自动编译库的方法 |
CN112015428A (zh) * | 2020-08-21 | 2020-12-01 | 广州欢网科技有限责任公司 | 编译环境创建方法、装置及主机 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106843991A (zh) | 程序编译方法及系统 | |
Harel et al. | Modeling reactive systems with statecharts: the STATEMATE approach | |
US8245186B2 (en) | Techniques for offering and applying code modifications | |
Geary | Core JavaServer Faces, 3/e | |
US7861177B2 (en) | Software configuration program for software applications | |
US9524279B2 (en) | Help document animated visualization | |
CN101617294A (zh) | 组件式开发的改进 | |
CN111090433B (zh) | 一种数据处理的方法、装置和存储介质 | |
CN105068881A (zh) | 一种修复应用程序运行异常的方法、装置和系统 | |
CN103324505B (zh) | 在集群系统和云计算系统中部署gpu开发环境的方法 | |
US8776031B1 (en) | Manipulating resources embedded in a dynamic-link library | |
US8473933B2 (en) | Refactoring call sites | |
CN107301041A (zh) | 一种定制系统功能的方法及系统 | |
CN107832059A (zh) | 一种基于Makefile的代码静态分析方法和装置 | |
Kazoun et al. | Programming Flex 2: The Comprehensive Guide to Creating Rich Internet Applications with Adobe Flex | |
Loy et al. | Learning Java: An Introduction to Real-World Programming with Java | |
Bharathan | Apache Maven Cookbook | |
CN104915199B (zh) | 一种将Flash项目转换为Html5项目的方法与装置 | |
CN106528206A (zh) | 应用的启动控制方法、装置和加固应用安装包的装置 | |
Chakravarthy et al. | Edicts: implementing features with flexible binding times | |
US11221844B2 (en) | Automated application partitioning system | |
Melymuka | TeamCity 7 continuous integration essentials | |
CN110413314A (zh) | 一种文件发布方法、装置、设备及存储介质 | |
CN109298883A (zh) | 一种教育平台下的自动生成组件文件的方法及电子设备 | |
Salvador et al. | Embedded Linux Development using Yocto Projects: Learn to leverage the power of Yocto Project to build efficient Linux-based products |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170613 |