Windows编译工程文档
综述
KES的Windows编译脚本主要通过Perl脚本语言进行编写,借用Visual Studio的编译打包环境构建Windows平台应用。本文档旨在介绍脚本语言各模块的主要功能和重要代码。
Perl脚本语言基本介绍
Perl是Practical Extraction and Report Language的缩写,可翻译为“实用报表提取语言”。Perl借用了C、sed、awk、shell脚本以及很多编译语言的特性。
Perl环境在Linux操作系统下将内置存在,但是在Windows操作系统下需要自行安装Perl环境才能运行Perl脚本。
Perl语言编写的文件后缀名通常为.pl,Perl相比于大多数语言一样,引入了包和模块的概念,每一个包有单独的符号表,定义语法为:
package mypack;
Perl中用包来构建模块,一个模块为一个文件,后缀名为.pm,可通过require和use载入一个模块。
编译模块介绍
在Windows环境中,负责编译的文件主要有以下几个文件:build.bat、build.pl、mkvcbuild.pl、mkvcbuild.pm、MSBuildProject.pm、Project.pm、Solution.pm、sysbison.pl、sysflex.pl、VSObjectFactory.pm
编译流程介绍
Windows的编译,主要通过调用build命令完成,实际上是调用了build.bat的Windows脚本文件,具体的调用流程大体如下:
各模块介绍:
build.bat,build.pl
build.bat脚本接收了控制台的输入,然后只调用了build.pl脚本,并将参数传递给了build.pl脚本。
build.pl脚本在构建工程之前,调用了config.pl以及config_default.pl文件配置了全局环境(config.pl文件在config命令后生成);随后build.pl文件调用mkvcbuild模块构建了工程文件;最后build.pl文件调用Visual Studio的编译打包命令msbuild进行项目的编译。
mkvcbuild.pm
mkvcbuild模块主要负责工程文件的生成,也就是根目录下.vcxproj文件以及.sln文件的生成。在新的Windows编译中,我们结构化了每个工程文件的生成方案,通过json文件夹下对应的.json文件完成工程的搭建;
同时,我们通过build.json文件控制哪些工程需要进行编译,哪些工程跳过编译。具体代码位于mkvcbuild.pm文件里的mkvcbuild函数,具体的json结构说明参见《Windows编译操作文档》。
Solution.pm
Solution.pm主要负责整个工程(解决方案)的搭建(_new),以及单个工程的创建(AddProject),编译前的预处理(GenerateFiles),工程文件的保存(Save)
解决方案的搭建
Solution.pm主要通过_new搭建解决方案,具体内容包括了系统环境的确立,全局变量的初始化,VS编译工具的版本获取等工作。
单个工程的创建
Solution.pm主要通过AddProject搭建一个新的工程,主要工作为根据解决方案初始化工程的参数以及加入公共的库文件和头文件。
编译前的预处理
Solution.pm主要通过GenerateFiles进行编译前的预处理,主要完成了公共文件的拷贝,符号文件的生成,以及调用对应的Perl脚本文件生成文件等工作。
工程文件的保存
Solution.pm主要通过Save进行最后的工程文件的保存,具体内容为调用 GenerateFiles进行预处理,读取解决方案中的每个工程,调用Project模块的Save函数保存单个工程,最后保存解决方案。
Project.pm
Project.pm主要负责单个工程的处理,包括了工程的创建_new,添加需要编译的文件(AddFile, AddFiles),添加头文件目录(AddIncludeDir),添加符号文件(UseDef),添加外部依赖库(AddLibrary),添加内部编译库直接的依赖(AddReference),具体对照可以参见《Windows编译操作文档》。
MSBuildProject.pm
MSBuildProject模块主要负责把解决方案和工程对象转化成真正的解决方案文件和工程文件,包括标签的组织形式,编译选项设置等。
VSObjectFactory.pm
VSObjectFactory模块负责根据不同的VS编译环境,生成不同的解决方案。
sysbison.pl、sysflex.pl
词法语法解析模块,调用方式为像工程文件里写入命令行操作,msbuild编译工具在执行编译时会执行命令行语句,从而调用脚本编译对应的.y和.l文件,在当前编译工程里,需要在sysbison.pl文件里显式添加.y文件才能正确地处理它。
安装模块介绍
Windows的安装,主要通过以下几个文件完成:instal.bat、install.pl、install.pm。
instal.bat
调用install.pl脚本进行安装,同时复制第三方库文件到安装文件夹下。
install.pl
install.pl进行了环境的读取,以及命令行参数控制安装行为,实际上是调用install.pm模块的install函数。
install.pm
install模块真正完成了安装工作,主要拷贝了可执行文件,依赖的动态库与静态库,Windows符号表,头文件,插件等文件的拷贝。
…