CN101697135A - 一种编译程序的方法及装置 - Google Patents
一种编译程序的方法及装置 Download PDFInfo
- Publication number
- CN101697135A CN101697135A CN200910235856A CN200910235856A CN101697135A CN 101697135 A CN101697135 A CN 101697135A CN 200910235856 A CN200910235856 A CN 200910235856A CN 200910235856 A CN200910235856 A CN 200910235856A CN 101697135 A CN101697135 A CN 101697135A
- Authority
- CN
- China
- Prior art keywords
- module
- file
- depending module
- compiling
- described depending
- 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
Images
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种编译程序的方法及装置,其中,所述方法包括:读入用户输入的环境参数,配置环境参数变量;调用相关的shell脚本工具,生成编译规则临时文件;引用所述编译规则临时文件,调用相应的编译器对程序进行编译。通过本发明,能够方便、快捷地完成编译,并且易于维护和移植,能够提高编译速度。
Description
技术领域
本发明涉及编译技术领域,特别是涉及一种编译程序的方法及装置。
背景技术
通常,在编写好程序代码之后,在Windows下使用IDE(IntegratedDevelop Environment,集成开发环境)工具对编写完成的代码进行编译时,大多数IDE会自动生成Makefile文件,因此,程序员通常不需要关注如何写Makefile文件,只需要将代码编写好后,运行IDE工具提供的“编译”,IDE工具会自动生成Makefile文件,进行编译,得到最终结果。
但是,在linux下编程时,程序员就不得不直接面对Makefile文件了。例如,对于一个简单的程序,只含有main.c,程序员编译时可以直接用gcc编译器,使用gcc-o test main.c命令即可得到最终可执行文件test。但是如果工程里面包含了大量的源文件,以及依赖模块,则直接使用gcc输入命令显然是不合适的,所以,make工具解决了这个问题,该工具通过读入符合Makefile规则的文件(默认文件名为Makefile或makefile,也可以通过make_f ***来使用非标准文件名的Makefile文件),来推导各个源文件的依赖关系,调用相应的编译指令来生成最终目标。
对于一个源文件较少的工程,直接按照Makefile规则编写一个Makefile文件不是很难的一件事情,但是对于一个包含了大量的源文件,且依赖的模块有很多的工程,写一个正确的Makefile文件就不是一件容易的事情了,对每一个工程都要写一个正确的Makefile文件,常常需要耗费程序员很大的精力,并且容易出错,不便于维护及移植。
发明内容
本发明提供一种编译程序的方法及装置,能够提高程序编译的效率。
为实现上述目的,本发明提供了如下方案:
一种编译程序的方法,包括:
读入用户输入的环境参数,配置环境参数变量;
调用相关的shell脚本工具,生成编译规则临时文件;
引用所述编译规则临时文件,调用相应的编译器对程序进行编译。
优选的,还包括:
调用相关的shell脚本工具,从预先保存的文件中获取依赖模块的相关信息,将所述相关信息加入主模块的相关参数中。
优选的,当所述依赖模块为静态库模块时,所述依赖模块的相关信息包括所述依赖模块本身。
优选的,当所述依赖模块为动态库模块时,所述依赖模块的相关信息包括所述依赖模块所在的路径或者名称。
优选的,还包括:
读入所述依赖模块的环境参数,编译所述依赖模块,并生成本次编译过程的缓存文件。
优选的,还包括:
判断依赖模块是否已经保存在缓存文件中,如果是,跳过编译所述依赖模块的步骤。
一种编译程序的装置,包括:
读入单元,用于读入用户输入的环境参数,配置环境参数变量;
生成单元,用于调用相关的shell脚本工具,生成编译规则临时文件;
编译单元,用于引用所述编译规则临时文件,调用相应的编译器对程序进行编译。
优选的,还包括:
依赖模块获取单元,用于调用相关的shell脚本工具,从预先保存的文件中获取依赖模块的相关信息,将所述相关信息加入主模块的相关参数中。
优选的,当所述依赖模块为静态库模块时,所述依赖模块的相关信息包括所述依赖模块本身。
优选的,当所述依赖模块为动态库模块时,所述依赖模块的相关信息包括所述依赖模块所在的路径或者名称。
优选的,还包括:
缓存单元,用于读入所述依赖模块的环境参数,编译所述依赖模块,并生成本次编译过程的缓存文件。
优选的,还包括:
判断单元,用于判断依赖模块是否已经保存在缓存文件中,如果是,跳过编译所述依赖模块的步骤。
根据本发明提供的具体实施例,本发明公开了以下技术效果:
本发明能够通过读入用户输入的环境参数,配置环境参数变量;调用相关的shell脚本工具,生成编译规则临时文件;引用所述编译规则临时文件,调用相应的编译器对程序进行编译。因此,通过本发明,用户无须手动编写Makefile文件,只需要输入环境参数,就可以调用本发明提供的shell脚本工具,生成编译规则临时文件,然后完成实现编译过程。因此,能够方便、快捷地完成编译,并且易于维护和移植,能够提高编译速度。
此外,在进行跨平台或交叉编译时,只需要指定平台参数即可,而不需要专门针对某个平台编写不同的Makefile文件。
最后,主模块和依赖模块可以同时编译,方便于同时开发主模块和依赖模块的情况。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的方法的流程图;
图2是本发明实施例提供的装置的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,本发明实施例提供的编译程序的方法包括以下步骤:
S101:读入用户输入的环境参数,配置环境参数变量;
S102:调用相关的shell脚本工具,生成编译规则临时文件;
S103:引用所述编译规则临时文件,调用相应的编译器对程序进行编译。
为了实现上述技术方案,本发明实施例提供了Makefile模板以及一系列的shell脚本工具。其中,shell脚本工具可以组成.rules文件,保存在与各工程的同级或上级目录中,以便各工程都可以调用.rules文件中的Shell脚本工具。
用户仅需填写Makefile模板中所需的环境参数,然后点击make,本发明实施例提供的编译工具就可以调用rules.gcc这一shell脚本工具,读入用户编译时输入的参数,来配置相关参数变量,调用相应的shell脚本工具,来生成编译规则文件进行编译,生成最终目标,即整个过程中,无须生成通常意义上的Makefile文件,make之前,也不需要首先经过“自动生成Makefile文件”等操作。
其中,Makefile模板主要是提供给用户,由用户填写一些环境参数,其中,环境参数可以包括:
A)平台名称:PLATFORM
ifeq($(PLATFORM),)
PLATFORM=i386-linux
Endif
即,如果make时没有指定PLATFORM,则默认是i386-linux类型
B)输出类型及名称
#MAKE_STATIC_LIB:=1
#MAKE_SHARED_LIB:=1
EXECUTABLE:=
即,如果输出时静态库,则MAKE_STATIC_LIB:=1,如果是动态库,则MAKE_SHARED_LIB:=1
否则是可执行文件。目标名称为EXECUTABLE值。
其中,MAKE_STATIC_LIB和MAKE_SHARED_LIB二者最多只能设定一个,可执行文件不能设定这两个选项的任何一个。
EXECUTABLE:=最终目标文件名。
C)头文件路径
INCLUDE_PATH:=$(SYS_INCLUDE_PATH)\
默认已经包含了系统头文件路径,只需把程序中依赖的所有头文件路径包含进来即可
D)用户自定义宏
DEFINES:=-DXP_UNIX-DOS_LINUX
如果是程序中固定的宏,可以直接写在这里,如果是可变的宏定义,可以灵活地通过make参数加在这里。
E)包含路径设定
INCLUDE_PATH:=$(SYS_INCLUDE_PATH)
如果程序依赖其他库,可以把库路径写在这里。
其中,INCLUDE_PATH是项目需要的include文件的目录,如:-I./-I../include;
SYS_INCLUDE_PATH为系统包含文件路径的环境变量。
F)连接库包含路径设定
LIBRARY_PATH:=$(SYS_LIBRARY_PATH)
其中,LIBRARY_PATH是项目在此路径下搜索包含的动态库,如:-L./-L../source;
SYS_LIBRARY_PATH为系统lib文件路径的环境变量。
G)连接库设定
LIBS:=-lpthread-lstdc++
USERLIBS:=
其中,LIBS是一个需要连接的标准程序库列表,带-l前缀,例如pthread,stdc++等等;
USERLIBS是需要连接的用户程序库列表,不带-l前缀;
对于linux下的动态库必须加在LIBS里面,并在LIBRARY_PATH里面加上动态库所在的目录,其中,动态库必须以lib为前缀。
H)源文件设定
SOURCE:=$(wildcard./source/*.c)$(wi ldcard./source/*.cc)$(wildcard./source/*.cpp)
_SOURCE:=
其中,默认SOURCE为makefile所在目录下的source目录下所有c/c++源文件;
源文件最终集合=[SOURCE集]-[_SOURCE集]。
用户仅需要将上述环境参数填写完毕,就可以输入make指令,然后,make工具就会自动调用相关的shell脚本工具(make_obj_rules),生成编译规则临时文件,该文件符合Makefile规范,然后引用所述编译规则临时文件,调用相应的编译器对程序进行编译。
在实际应用中,一个工程的主模块可能会存在大量的依赖模块,在现有技术中,需要在Makefile文件中根据每个模块的类型(如动态库和静态库),在调用编译器的指令处将依赖的模块的最终生成目标所在路径、模块名称等参数填写正确,,并且,主模块和依赖模块间的编译是独立的,编译主模块时,必须确保倚赖模块最终生成目标已经被编译,才能生成主模块的最终目标,这对于同时开发主模块和依赖模块的情况,由于经常会同时修改依赖模块,并且可能模块间依赖关系比较复杂,如果每次都要先将依赖的模块全部编译好之后再编译主模块,并且在全部编译好之后还要将依赖的所有动态库模块都拷贝到主模块目录下运行,则使用起来不方便,不能在编译时自动开始编译所依赖的工程,并且在编译后自动安装(即拷贝所有依赖的动态库到主模块最终生成的可执行文件所在目录下),以能够运行最终的可执行文件。
而在本发明实施例中,依赖关系可以写在一个单独的文件(modules.depend)中,并且同时提供了相应的shell脚本工具(kdepend),在编译主模块的过程中,可以调用kdepend去获取依赖模块的目标名、目标路径等,并加入到主模块的相关参数中。
其中,如果MODULES_DEPEND中含静态库模块,则可以直接添加该依赖模块到USERLIBS变量;如果MODULES_DEPEND中含动态库模块,则可以添加该动态库模块所在路径或者名称到LIBRARY_PATH变量。
其中,依赖模块也具有子集的环境参数(也是由用户填写的),并且还可以有其所依赖的模块。也就是说,在编译依赖模块时,其处理方法与编译主模块是一样的,同样需要读入其环境参数,并配置环境参数变量,而且,也可以调用相关的shell脚本工具,生成编译规则临时文件,对该依赖模块进行编译。因此,在本发明实施例中,依赖模块与主模块的编译不是相互独立的,可以在编译主模块的过程中,编译依赖模块,因此,在编译主模块时,就不再需要预先编译好依赖模块,主模块与依赖模块可以同时开发。
在实际应用中,可能会有多个模块都依赖于同一依赖模块,这样在对某依赖模块编译过之后,在该依赖模块没有发生更新的情况下,其他模块再调用该依赖模块时,就可以不用再进行编译。
为此,本发明实施例可以在编译所述依赖模块时,生成本次编译过程的缓存(cache)文件。相应的,本发明实施例提供了另一种shell脚本工具mkcachefile,调用该工具时,可以生成本次编译过程的cache文件,该文件用于保存本次编译过程中已经编译过的模块,避免多模块依赖同一模块时对该模块的重复编译。然后,还可以调用put_into_cache工具,将已编译的依赖模块加入cache文件中
同时,还可以提供not_in_cache脚本工具,调用该工具可以判断某依赖模块是否存在cache文件中,如不存在则编译该依赖模块,否则表示已经编译过,跳过对该依赖模块的编译过程。同时也可以判断某模块是否已经执行过拷贝到最终目标路径的过程。
除了Makefile模板及shell脚本工具之外,本发明实施例还提供了平台相关配置文件,该文件主要用来指明平台相关的工具,配置文件名格式为rules.(PLATFORM),如mips平台下配置文件取名为rules.mipsel-linux,i386平台下配置文件取名为rules.i386-linux,平台配置文件主要设置该平台下编译工具的名称前缀,及平台相关的隐含规则变量等,如rules.mipsel-linux内容。这样,在进行跨平台或交叉编译时,填写平台相关配置文件即可,而不需要针对各个平台编写相应的Makefile文件。
其中,所述交叉编译指在一个平台上生成另一个平台上的可执行代码,在一些特定环境下,例如目标机器由于资源问题不能运行编译器,或源程序太大不能拷贝到目标机器进行编译时,都需要在另外一个平台上,安装目标平台的交叉编译工具链,来编译成能运行在目标平台上的可执行文件。在现有技术中,当用户在开发程序时,可能想分别编译成目标平台A和B(如×86和mips平台)上的代码以检查编译是否正确,则需要分别生成平台A和B上的Makefile文件进行编译,而本发明实施例中则不需要分别针对平台生成相应的Makefile文件,只需要在平台配置文件中进行配置即可。
为了更好地理解本发明实施例提供的方法,下面通过具体应用中的操作流程,对本发明进行详细地介绍。
(一)工程的目录结构需要遵循规则:拷贝所有需要的shell脚本工具和平台配置文件到.rules目录,并将.rules目录保存为与所有工程目录同级或更高一级;Makefile模板文件和modules.depend必须位于工程目录下。例如可建立如下目录结构:
|-project
|--------.rules
|---------prj1
|-----------------source
|-----------------include
|-----------------Makefile
|-----------------modules.depend
|---------prj2
|-----------------source
|-----------------include
|-----------------Makefile
|-----------------modules.depend
(二)当建立一个新的工程进行编译时:首先拷贝Makefile模板到工程目录下,按照模板格式填写必要的参数,同时将工程依赖的模块路径写到modules.depend文件中,编译即可。
(三)编译流程
1)用户输入make命令进行编译时,make工具开始解析Makefile模板文件,读取该模板文件的参数变量;
2)通过Makefile模板中的语句:include$(TOPDIR)/.rules/rules.$(PLATFORM),make工具开始解析.rules目录下的rules.$(PLATFORM)文件,读入平台相关参数变量。其中,$(PLATFORM)被替换为用户在make时指定的平台类型(不指定时默认为i386-linux)。例如,makePLATFORM=i386-linux表示编译成i386-linux平台上的目标,makePLATFORM=mipsel-linux表示编译成mipsel-linux平台上的目标;
3)通过rules.($PLATFORM)文件中的语句include$(TOPDIR)/.rules/rules.gcc,make工具开始解析.rules目录下的rules.gcc文件;
4)make工具解析rules.gcc过程中,对相关参数变量进行了赋值,并执行相关指令,依次编译依赖的模块,生成本模块的编译规则临时文件,调用编译器进行编译,具体过程如下:
a)调用mkcachefile生成cache文件
b)相关环境参数设置,主要参数为:
BUILDING_OUTPUT_DIR:目标输出路径。
INSTALL_DIR:目标安装全路径
CC:C编译器
C++C:C++编译器
LD:连接器
MODULES_DEPEND:从.modules.depend文件中获取依赖模块到该变量;
USERLIBS:调用kdepend工具,如MODULES_DEPEND中含静态库模块,则添加该模块到USERLIBS变量;
LIBRARY_PATH:调用kdepend工具,如MODULES_DEPEND中含动态库模块,则添加该动态库模块所在路径到LIBRARY_PATH变量;
LIBS:调用kdepend工具,如MODULES_DEPEND中含动态库模块,则添加该动态库模块名到LIBS变量;
CFLAGS,CXXFLAGS,DEFINES,LDFLAGS:隐含规则变量;
LDFLAGS:运行时lib寻找路径和连接时的lib路径;
OBJS,DEPS:编译工具编译时输入参数变量;
5)规则设置好后,执行编译过程
a)编译依赖模块
对每个依赖模块,调用not_in_cache检查该模块是否在cache文件中;如在cache文件中,表示该模块已经被编译过,检查下一个模块,重复a);如没有在cache文件,则调用make,并将参数传递,编译该依赖模块,编译过程与编译主模块相同;并将该模块的名称加入cache中,表明该模块已经被编译;
b)调用make_obj_rules生成本模块编译规则临时文件obj_rules.tmk;
c)make命令工具引用obj_rules.tmk文件,调用相应编译器进行编译。
6)编译完成后,执行安装过程
a)如果本模块是静态库,拷贝本模块生成目标结果到INSTALL_DIR目录;
b)如果本模块非静态库,则对每个依赖目标,调用not_in_cache判断该目标是否已经被安装;
c)如果已经被安装到INSTALL_DIR目录,则检查下一个模块;
d)如果没有安装,则执行拷贝安装过程,并在cache文件中置已经安装标志。
总之,本发明实施例可以建立一套标准的Makefile模板,结合所提供的shell脚本工具,使得对于每个工程,只需要按照Makefile模板格式填写一些相关的环境参数,即可通过make工具进行编译;编译时自动编译依赖模块,且对该过程进行优化,避免多模块依赖同一模块时对该依赖模块的重复编译和最终拷贝安装过程。
与本发明实施例提供的编译程序的方法相对应,本发明实施例还提供了一种编译程序的装置,参见图2,该装置包括:
读入单元U201,用于读入用户输入的环境参数,配置环境参数变量;
生成单元U202,用于调用相关的shell脚本工具,生成编译规则临时文件;
编译单元U203,用于引用所述编译规则临时文件,调用相应的编译器对程序进行编译。
当一个工程存在多个依赖模块时,该装置还可以包括:
依赖模块获取单元,用于调用相关的shell脚本工具,从预先保存的文件中获取依赖模块的相关信息,将所述相关信息加入主模块的相关参数中。
其中,当所述依赖模块为静态库模块时,所述依赖模块的相关信息包括所述依赖模块本身。
当所述依赖模块为动态库模块时,所述依赖模块的相关信息包括所述依赖模块所在的路径或者名称。
为了避免对同一依赖模块的重复编译,该装置还可以包括:
缓存单元,用于读入所述依赖模块的环境参数,编译所述依赖模块,并生成本次编译过程的缓存文件。
在此基础上,该装置还可以包括:
判断单元,用于判断依赖模块是否已经保存在缓存文件中,如果是,跳过编译所述依赖模块的步骤。
以上对本发明所提供的一种编译程序的方法及装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。
Claims (12)
1.一种编译程序的方法,其特征在于,包括:
读入用户输入的环境参数,配置环境参数变量;
调用相关的shell脚本工具,生成编译规则临时文件;
引用所述编译规则临时文件,调用相应的编译器对程序进行编译。
2.根据权利要求1所述的方法,其特征在于,还包括:
调用相关的shell脚本工具,从预先保存的文件中获取依赖模块的相关信息,将所述相关信息加入主模块的相关参数中。
3.根据权利要求2所述的方法,其特征在于,当所述依赖模块为静态库模块时,所述依赖模块的相关信息包括所述依赖模块本身。
4.根据权利要求2所述的方法,其特征在于,当所述依赖模块为动态库模块时,所述依赖模块的相关信息包括所述依赖模块所在的路径或者名称。
5.根据权利要求2所述的方法,其特征在于,还包括:
读入所述依赖模块的环境参数,编译所述依赖模块,并生成本次编译过程的缓存文件。
6.根据权利要求5所述的方法,其特征在于,还包括:
判断依赖模块是否已经保存在缓存文件中,如果是,跳过编译所述依赖模块的步骤。
7.一种编译程序的装置,其特征在于,包括:
读入单元,用于读入用户输入的环境参数,配置环境参数变量;
生成单元,用于调用相关的shell脚本工具,生成编译规则临时文件;
编译单元,用于引用所述编译规则临时文件,调用相应的编译器对程序进行编译。
8.根据权利要求7所述的装置,其特征在于,还包括:
依赖模块获取单元,用于调用相关的shell脚本工具,从预先保存的文件中获取依赖模块的相关信息,将所述相关信息加入主模块的相关参数中。
9.根据权利要求8所述的装置,其特征在于,当所述依赖模块为静态库模块时,所述依赖模块的相关信息包括所述依赖模块本身。
10.根据权利要求8所述的装置,其特征在于,当所述依赖模块为动态库模块时,所述依赖模块的相关信息包括所述依赖模块所在的路径或者名称。
11.根据权利要求8所述的装置,其特征在于,还包括:
缓存单元,用于读入所述依赖模块的环境参数,编译所述依赖模块,并生成本次编译过程的缓存文件。
12.根据权利要求11所述的装置,其特征在于,还包括:
判断单元,用于判断依赖模块是否已经保存在缓存文件中,如果是,跳过编译所述依赖模块的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102358566A CN101697135B (zh) | 2009-10-28 | 2009-10-28 | 一种编译程序的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102358566A CN101697135B (zh) | 2009-10-28 | 2009-10-28 | 一种编译程序的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101697135A true CN101697135A (zh) | 2010-04-21 |
CN101697135B CN101697135B (zh) | 2012-06-27 |
Family
ID=42142240
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009102358566A Active CN101697135B (zh) | 2009-10-28 | 2009-10-28 | 一种编译程序的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101697135B (zh) |
Cited By (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799437A (zh) * | 2012-07-18 | 2012-11-28 | 清华大学 | 一种编译脚本自动生成方法和自动生成装置 |
CN103064722A (zh) * | 2012-12-14 | 2013-04-24 | 北京思特奇信息技术股份有限公司 | 一种程序统一编译方法及系统 |
CN103279356A (zh) * | 2013-06-04 | 2013-09-04 | 百度在线网络技术(北京)有限公司 | Makefile文件的自动生成方法和装置 |
CN103455337A (zh) * | 2013-09-12 | 2013-12-18 | 四川长虹电器股份有限公司 | 在安卓开发环境下使用动态库的方法 |
CN103499942A (zh) * | 2013-10-14 | 2014-01-08 | 龙芯中科技术有限公司 | 模块配置的处理方法和装置 |
CN103559134A (zh) * | 2013-11-11 | 2014-02-05 | 曙光信息产业(北京)有限公司 | 基准测试组件的配置方法和装置 |
CN103605515A (zh) * | 2013-11-11 | 2014-02-26 | 曙光信息产业(北京)有限公司 | 并行编程组件的配置方法和装置 |
CN103902346A (zh) * | 2012-12-27 | 2014-07-02 | 上海鼎为电子科技(集团)有限公司 | 预编译中模拟宏控的实现方法及装置 |
CN104572238A (zh) * | 2015-01-23 | 2015-04-29 | 烽火通信科技股份有限公司 | 一种高效的生成可执行软件包的方法及系统 |
CN104572194A (zh) * | 2014-12-30 | 2015-04-29 | 北京奇虎科技有限公司 | 一种模块加载方法和装置 |
CN104866368A (zh) * | 2014-12-19 | 2015-08-26 | 北汽福田汽车股份有限公司 | 一种Makefile文件生成方法和装置 |
CN105700934A (zh) * | 2016-02-19 | 2016-06-22 | 陕西瑞亚智能技术有限公司 | 一种智能编译方法和智能编译系统 |
CN103870262B (zh) * | 2012-12-14 | 2017-06-06 | 北汽福田汽车股份有限公司 | 一种基于shell脚本的变量自动生成方法及装置 |
WO2017166529A1 (zh) * | 2016-03-29 | 2017-10-05 | 乐视控股(北京)有限公司 | 一种针对多个编译平台的编译系统和方法 |
CN107766048A (zh) * | 2017-10-23 | 2018-03-06 | 山东浪潮通软信息科技有限公司 | 一种页面编译方法及装置 |
CN108304184A (zh) * | 2016-08-09 | 2018-07-20 | 上海思立微电子科技有限公司 | 编译方法及装置 |
CN108304185A (zh) * | 2016-08-09 | 2018-07-20 | 上海思立微电子科技有限公司 | 一种编译模块的方法和装置 |
CN109240646A (zh) * | 2017-06-09 | 2019-01-18 | 龙芯中科技术有限公司 | 应用程序开发工具的构建方法、装置、设备和存储介质 |
CN109491661A (zh) * | 2018-10-24 | 2019-03-19 | 武汉思普崚技术有限公司 | 通用交叉编译方法及设备 |
WO2019051919A1 (zh) * | 2017-09-18 | 2019-03-21 | 网宿科技股份有限公司 | 一种构建镜像的方法和装置 |
CN109542446A (zh) * | 2017-08-14 | 2019-03-29 | 中兴通讯股份有限公司 | 一种编译系统、方法及编译器 |
CN110007923A (zh) * | 2019-03-28 | 2019-07-12 | 深圳市创联时代科技有限公司 | 一种shell的实现方法 |
CN110457044A (zh) * | 2019-07-04 | 2019-11-15 | 广东三维家信息科技有限公司 | Haxe应用程序的编译方法、装置及电子设备 |
CN110471663A (zh) * | 2018-05-11 | 2019-11-19 | 杭州海康威视数字技术股份有限公司 | 一种代码编译方法、装置及电子设备 |
CN110737437A (zh) * | 2018-07-20 | 2020-01-31 | 北京君正集成电路股份有限公司 | 一种基于代码集成的编译方法和装置 |
CN111061489A (zh) * | 2019-12-27 | 2020-04-24 | 上海米哈游天命科技有限公司 | 一种多平台编译检测方法、装置、设备及介质 |
CN111221534A (zh) * | 2019-12-31 | 2020-06-02 | 卡斯柯信号有限公司 | 一种模块化嵌入式软件交叉编译烧录装置及方法 |
CN111309308A (zh) * | 2020-02-27 | 2020-06-19 | 思客云(北京)软件技术有限公司 | 一种对c和c++编译器加壳的方法、设备和计算机可读存储介质 |
CN112748931A (zh) * | 2021-01-21 | 2021-05-04 | 广州虎牙科技有限公司 | 编译文件管理方法、调用方法、装置及电子设备 |
CN115220728A (zh) * | 2022-07-01 | 2022-10-21 | 广州汽车集团股份有限公司 | 一种嵌入式Linux系统软件交互式编译管理方法及装置 |
CN117251166A (zh) * | 2023-08-25 | 2023-12-19 | 上海合芯数字科技有限公司 | 缩短op-build编译时间的编译方法、装置、终端及介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100485620C (zh) * | 2007-09-12 | 2009-05-06 | 中兴通讯股份有限公司 | 集成开发环境中的程序代码编译方法 |
CN101452394B (zh) * | 2007-11-28 | 2012-05-23 | 无锡江南计算技术研究所 | 编译方法和编译器 |
JP2009169864A (ja) * | 2008-01-18 | 2009-07-30 | Panasonic Corp | コンパイル方法およびコンパイルプログラム |
-
2009
- 2009-10-28 CN CN2009102358566A patent/CN101697135B/zh active Active
Cited By (46)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799437B (zh) * | 2012-07-18 | 2015-07-29 | 清华大学 | 一种编译脚本自动生成方法和自动生成装置 |
CN102799437A (zh) * | 2012-07-18 | 2012-11-28 | 清华大学 | 一种编译脚本自动生成方法和自动生成装置 |
CN103064722A (zh) * | 2012-12-14 | 2013-04-24 | 北京思特奇信息技术股份有限公司 | 一种程序统一编译方法及系统 |
CN103870262B (zh) * | 2012-12-14 | 2017-06-06 | 北汽福田汽车股份有限公司 | 一种基于shell脚本的变量自动生成方法及装置 |
CN103902346B (zh) * | 2012-12-27 | 2017-09-29 | 上海鼎为电子科技(集团)有限公司 | 预编译中模拟宏控的实现方法及装置 |
CN103902346A (zh) * | 2012-12-27 | 2014-07-02 | 上海鼎为电子科技(集团)有限公司 | 预编译中模拟宏控的实现方法及装置 |
CN103279356A (zh) * | 2013-06-04 | 2013-09-04 | 百度在线网络技术(北京)有限公司 | Makefile文件的自动生成方法和装置 |
CN103279356B (zh) * | 2013-06-04 | 2019-01-25 | 百度在线网络技术(北京)有限公司 | Makefile文件的自动生成方法和装置 |
CN103455337A (zh) * | 2013-09-12 | 2013-12-18 | 四川长虹电器股份有限公司 | 在安卓开发环境下使用动态库的方法 |
CN103499942A (zh) * | 2013-10-14 | 2014-01-08 | 龙芯中科技术有限公司 | 模块配置的处理方法和装置 |
CN103499942B (zh) * | 2013-10-14 | 2016-03-30 | 龙芯中科技术有限公司 | 模块配置的处理方法和装置 |
CN103605515B (zh) * | 2013-11-11 | 2017-11-10 | 曙光信息产业(北京)有限公司 | 并行编程组件的配置方法和装置 |
CN103605515A (zh) * | 2013-11-11 | 2014-02-26 | 曙光信息产业(北京)有限公司 | 并行编程组件的配置方法和装置 |
CN103559134A (zh) * | 2013-11-11 | 2014-02-05 | 曙光信息产业(北京)有限公司 | 基准测试组件的配置方法和装置 |
CN104866368A (zh) * | 2014-12-19 | 2015-08-26 | 北汽福田汽车股份有限公司 | 一种Makefile文件生成方法和装置 |
CN104866368B (zh) * | 2014-12-19 | 2018-08-28 | 北京宝沃汽车有限公司 | 一种Makefile文件生成方法和装置 |
CN104572194A (zh) * | 2014-12-30 | 2015-04-29 | 北京奇虎科技有限公司 | 一种模块加载方法和装置 |
CN104572238A (zh) * | 2015-01-23 | 2015-04-29 | 烽火通信科技股份有限公司 | 一种高效的生成可执行软件包的方法及系统 |
CN105700934A (zh) * | 2016-02-19 | 2016-06-22 | 陕西瑞亚智能技术有限公司 | 一种智能编译方法和智能编译系统 |
WO2017166529A1 (zh) * | 2016-03-29 | 2017-10-05 | 乐视控股(北京)有限公司 | 一种针对多个编译平台的编译系统和方法 |
CN108304184B (zh) * | 2016-08-09 | 2021-04-23 | 上海思立微电子科技有限公司 | 编译方法及装置 |
CN108304184A (zh) * | 2016-08-09 | 2018-07-20 | 上海思立微电子科技有限公司 | 编译方法及装置 |
CN108304185A (zh) * | 2016-08-09 | 2018-07-20 | 上海思立微电子科技有限公司 | 一种编译模块的方法和装置 |
CN109240646A (zh) * | 2017-06-09 | 2019-01-18 | 龙芯中科技术有限公司 | 应用程序开发工具的构建方法、装置、设备和存储介质 |
CN109542446A (zh) * | 2017-08-14 | 2019-03-29 | 中兴通讯股份有限公司 | 一种编译系统、方法及编译器 |
WO2019051919A1 (zh) * | 2017-09-18 | 2019-03-21 | 网宿科技股份有限公司 | 一种构建镜像的方法和装置 |
CN107766048B (zh) * | 2017-10-23 | 2020-09-15 | 浪潮通用软件有限公司 | 一种页面编译方法及装置 |
CN107766048A (zh) * | 2017-10-23 | 2018-03-06 | 山东浪潮通软信息科技有限公司 | 一种页面编译方法及装置 |
CN110471663A (zh) * | 2018-05-11 | 2019-11-19 | 杭州海康威视数字技术股份有限公司 | 一种代码编译方法、装置及电子设备 |
CN110471663B (zh) * | 2018-05-11 | 2024-01-02 | 杭州海康威视数字技术股份有限公司 | 一种代码编译方法、装置及电子设备 |
CN110737437A (zh) * | 2018-07-20 | 2020-01-31 | 北京君正集成电路股份有限公司 | 一种基于代码集成的编译方法和装置 |
CN109491661B (zh) * | 2018-10-24 | 2022-06-24 | 武汉思普崚技术有限公司 | 通用交叉编译方法及设备 |
CN109491661A (zh) * | 2018-10-24 | 2019-03-19 | 武汉思普崚技术有限公司 | 通用交叉编译方法及设备 |
CN110007923B (zh) * | 2019-03-28 | 2022-12-06 | 深圳市创联时代科技有限公司 | 一种shell的实现方法 |
CN110007923A (zh) * | 2019-03-28 | 2019-07-12 | 深圳市创联时代科技有限公司 | 一种shell的实现方法 |
CN110457044A (zh) * | 2019-07-04 | 2019-11-15 | 广东三维家信息科技有限公司 | Haxe应用程序的编译方法、装置及电子设备 |
CN111061489B (zh) * | 2019-12-27 | 2023-06-27 | 上海米哈游天命科技有限公司 | 一种多平台编译检测方法、装置、设备及介质 |
CN111061489A (zh) * | 2019-12-27 | 2020-04-24 | 上海米哈游天命科技有限公司 | 一种多平台编译检测方法、装置、设备及介质 |
CN111221534B (zh) * | 2019-12-31 | 2022-08-30 | 卡斯柯信号有限公司 | 一种模块化嵌入式软件交叉编译烧录装置及方法 |
CN111221534A (zh) * | 2019-12-31 | 2020-06-02 | 卡斯柯信号有限公司 | 一种模块化嵌入式软件交叉编译烧录装置及方法 |
CN111309308A (zh) * | 2020-02-27 | 2020-06-19 | 思客云(北京)软件技术有限公司 | 一种对c和c++编译器加壳的方法、设备和计算机可读存储介质 |
CN112748931A (zh) * | 2021-01-21 | 2021-05-04 | 广州虎牙科技有限公司 | 编译文件管理方法、调用方法、装置及电子设备 |
CN112748931B (zh) * | 2021-01-21 | 2023-08-04 | 广州虎牙科技有限公司 | 编译文件管理方法、调用方法、装置及电子设备 |
CN115220728A (zh) * | 2022-07-01 | 2022-10-21 | 广州汽车集团股份有限公司 | 一种嵌入式Linux系统软件交互式编译管理方法及装置 |
CN115220728B (zh) * | 2022-07-01 | 2023-12-01 | 广州汽车集团股份有限公司 | 一种嵌入式Linux系统软件交互式编译管理方法及装置 |
CN117251166A (zh) * | 2023-08-25 | 2023-12-19 | 上海合芯数字科技有限公司 | 缩短op-build编译时间的编译方法、装置、终端及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN101697135B (zh) | 2012-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101697135B (zh) | 一种编译程序的方法及装置 | |
CN101697131B (zh) | 一种可重定位文件动态加载的方法及装置 | |
Perchat et al. | Component based framework to create mobile cross-platform applications | |
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
US20070044066A1 (en) | Embedded multi-language programming | |
Padgham et al. | Tool support for agent development using the Prometheus methodology | |
CN106415495A (zh) | 用于应用开发的编程系统和语言 | |
CN101859244A (zh) | 多工具链工程构建方法及系统 | |
US20200319867A1 (en) | Systems and methods for eager software build | |
US8930925B2 (en) | Method for enabling compilation of a Cobol source program utilizing a two-stage compilation process, the Cobol source program including a mix of Cobol, C++ or JAVA statements, and optional OpenMP directives | |
CN110554861B (zh) | 具有编译和读取-评估-打印-循环操作的软件开发环境 | |
US9141356B2 (en) | Process for generating dynamic type | |
Birken | Building code generators for DSLs using a partial evaluator for the Xtend language | |
US20100083238A1 (en) | Binary manipulation of intermediate-language code | |
Cho et al. | Development of a Prototyping Tool for New Memory Subsystem | |
Ilyushin et al. | On source-to-source compilers | |
CN103631585A (zh) | 一种用于开发应用程序的方法及系统 | |
Satav et al. | A comparative study and critical analysis of various integrated development environments of c, c++, and java languages for optimum development | |
Utke | OpenAD: algorithm implementation user guide. | |
Abate et al. | Bootstrapping software distributions | |
Danilewski et al. | Specialization through dynamic staging | |
Pompougnac et al. | Weaving synchronous reactions into the fabric of ssa-form compilers | |
Kreutzer et al. | Compiler-assisted instrumentation selection for large-scale C++ codes | |
Skog | Running. NET Cross-Platform Application on Linux: Proof of concept of running. NET cross-platform application on Linux | |
Karakaya et al. | SootUp: A Redesign of the Soot Static Analysis Framework |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
PP01 | Preservation of patent right | ||
PP01 | Preservation of patent right |
Effective date of registration: 20220726 Granted publication date: 20120627 |