VAPS XT入门教程19.10:大工程集成开发与编译
系列索引:VAPS XT开发入门教程索引
方案
如果一个VAPS XT工程太大,单个工程超过2GB。那么在性能较弱的PC上开发、编译、运行都会出现问题(升级是不可能升级的,这辈子都不可能升级的)。
根据开发的各个阶段,VAPS XT的开发商提供了两种不同的方案,VAPS XT用户某研究所提供了第三种方案。
方案一:集成编译
也就是本文涉及的方案,本文的方案描述基于Presagis方案修改。
- 以根工程和子工程的方式设计VAPS XT程序
- 根工程负责窗口管理、子工程负责窗口
- 分别进行设计、生成代码、编译
- 将子工程的*.obj替换掉根工程的同名文件
- 编译根工程、生成程序
方案二:VxWorks多分区方案
将程序部署在Vxworks平台上,不同的窗口部署在不同的分区。此方案的具体细节我还有见到,也没有测试过,不做过多评价。
方案三:窗口管理器
此方案由某研究所提供,经过我方项目负责人评估后暂时没有接。
将各个窗口编译为可执行程序,然后在Linux操作系统(为什么是Linux操作系统上呢?因为要部署在国产平台,那帮奸商最喜欢搞Linux换皮)上开发一个基于X11/Wayland的窗口管理器。
这样每个程序都很小,想用哪个用哪个。
此方案目前属于前期探索。
说明
测试环境:Windows10 + VAPS XT4.1 + Visual Studio 2010 Express
集成编译
此引导的目的是演示如何高效创建和分割大VAPS XT工程。此方法可以让大团队的工程易于管理、集成、编译。
引导包含三个部分:
- 设计顶层工程架构
- 实现独立子工程
- 集成工程和编译
介绍
以下是工程拆分为子工程和集成的完整流程:
- 将程序拆分为不同的页面或者部分(这样不同团队可以处理不同页面/部分)
- 定义每个页面/部分的命名空间(比如使用特别前缀以避免命名冲突)
- 定义公共共享资源(tables,stylingRules)
- 定义每个页面/部分所使用的每个表的索引范围(比如,页面/部分1只能使用图片库的第0-9部分,页面/部分2只能使用图片表的20-29,等等)
- 创建一个顶层根工程作为模板
- 将子工程(页面/部分)分配给不同的开发团队,他们必须在上面定义的基础上开发
- 每个子工程可以包含只在此工程中使用的条目,比如数据类型,资源、特有的小组件。
- 当子工程提交回根工程,集成人员集成编译
测试时,使用最简单的方式和内容,显示一个罗盘。
工程配置
创建顶级工程架构
创建新工程
添加一个画面对象
设置画面对象的属性
当然,*.vimp保持为空。
创建一个format用于显示,当然暂时为空
按照要求添加一个显示定义
并在其中添加一些窗口
其他的不需要处理,毕竟只是简单测试。
将Settings中的CODE nGEN中,Use Generate Dependency Objs
修改为Yes,Resource Generation
修改为:SaveAsBinaryFile。
Windows下默认使用wogl.cfg配置文件,我们将其复制一份,命名为wogl_lib.cfg
。修改BUILD_TYPE=lib,用于编译*.lib而不是可执行文件。
将此模板分发给各个开发人员用于后续开发。
子工程开发
获取到模板工程后,就可以进行子工程开发了。
右键Cformat,生成代码。
打开代码文件夹中的*.mak文件,删除字段中已经在顶级工程中存在了的内容。
选择wogl_lib.cgf配置,然后点击Build Only
。
编译生成*.lib文件
工程集成
一旦所有团队完成设计,集成者可以把子工程集成到顶级工程模板中。有两种方法
1、将子工程集成到大工程中
2、编译每个子工程的lib文件,然后用修改后的Makefile编译大工程
此处使用第2中方法。
你需要合并一个顶级工程和所有子工程。
至于怎么操作
4、执行顶级工程的Build Only
效果为:
在顶级工程中GO是没有内容的,只有*.lib中有,那么可以确定是集成编译操作。
obj版
接下来尝试使用*.obj文件进行替换。*.obj进行链接后得到的就是 *.lib。
工程
首先准备两个测试工程,一个图形对象只有声明,一个包含所有实现。
1、对于包含完整实现的工程,按照标准的程序方式编译生成程序。
配置为wogl.cfg
编译完成之后在代码所在的文件夹下有个objs.wogl
文件夹,此文件夹下有编译生成的所有我们需要的*.obj。
2、对于只包含声明的根工程,首先先生成代码,然后根据上一篇的方式进行合并。
将子工程的*.obj文件复制到根工程的objs.wogl
文件夹下,如果没有此文件夹就创建一个。
编译会出现警告,直接忽略。编译完成之后
根工程中没有实现,没有lib库,只有*.obj,所以我们认为实现此目标了。
自动化
对于这两篇提到的集成编译方法,对于习惯了VAPS XT的低代码设计人员来说有点复杂,所有考虑设计一个软件,将此流程自动化,以简化流程操作。
集成编译的流程为
软件是提供给客户使用的,不公开。
注意
- 如果使用的是已有的界面,注意尺寸数值要统一
- 此方案调用的是Format
如果你有问题,如果是简单的问题可以发邮件给免费解惑,如果涉及难问题或者需要提供附加的服务(比如授权、大工程集成编译、多分区相关,或者作为中间商联系Presagis)可以联系上海亥伯智能科技有限公司 邮箱
技术交流群,欢迎加入讨论。这个圈子很小,大佬可能没兴趣加这些群聊社区之类的。所以只能带你入门,当然,欢迎大佬指导