VAPS XT入门教程19.10:大工程集成开发与编译

系列索引:VAPS XT开发入门教程索引

上一篇:VAPS XT入门教程19.09:编译异常

方案

如果一个VAPS XT工程太大,单个工程超过2GB。那么在性能较弱的PC上开发、编译、运行都会出现问题(升级是不可能升级的,这辈子都不可能升级的)。

根据开发的各个阶段,VAPS XT的开发商提供了两种不同的方案,VAPS XT用户某研究所提供了第三种方案。

方法

方案一:集成编译

也就是本文涉及的方案,本文的方案描述基于Presagis方案修改。

  • 以根工程和子工程的方式设计VAPS XT程序
  • 根工程负责窗口管理、子工程负责窗口
  • 分别进行设计、生成代码、编译
  • 将子工程的*.obj替换掉根工程的同名文件
  • 编译根工程、生成程序

方案二:VxWorks多分区方案

将程序部署在Vxworks平台上,不同的窗口部署在不同的分区。此方案的具体细节我还有见到,也没有测试过,不做过多评价。

方案三:窗口管理器

此方案由某研究所提供,经过我方项目负责人评估后暂时没有接。

将各个窗口编译为可执行程序,然后在Linux操作系统(为什么是Linux操作系统上呢?因为要部署在国产平台,那帮奸商最喜欢搞Linux换皮)上开发一个基于X11/Wayland的窗口管理器。

这样每个程序都很小,想用哪个用哪个。

具体见Wayland开发入门教程索引

此方案目前属于前期探索。

说明

测试环境:Windows10 + VAPS XT4.1 + Visual Studio 2010 Express

集成编译

此引导的目的是演示如何高效创建和分割大VAPS XT工程。此方法可以让大团队的工程易于管理、集成、编译。

引导包含三个部分:

  • 设计顶层工程架构
  • 实现独立子工程
  • 集成工程和编译

介绍

以下是工程拆分为子工程和集成的完整流程:

  • 将程序拆分为不同的页面或者部分(这样不同团队可以处理不同页面/部分)
  • 定义每个页面/部分的命名空间(比如使用特别前缀以避免命名冲突)
  • 定义公共共享资源(tables,stylingRules)
  • 定义每个页面/部分所使用的每个表的索引范围(比如,页面/部分1只能使用图片库的第0-9部分,页面/部分2只能使用图片表的20-29,等等)
  • 创建一个顶层根工程作为模板
  • 将子工程(页面/部分)分配给不同的开发团队,他们必须在上面定义的基础上开发
  • 每个子工程可以包含只在此工程中使用的条目,比如数据类型,资源、特有的小组件。
  • 当子工程提交回根工程,集成人员集成编译

测试时,使用最简单的方式和内容,显示一个罗盘。

compass

工程配置

创建顶级工程架构

创建新工程

new project

添加一个画面对象

new ob

设置画面对象的属性

property

当然,*.vimp保持为空。

创建一个format用于显示,当然暂时为空

format

按照要求添加一个显示定义

dd

并在其中添加一些窗口

detail

其他的不需要处理,毕竟只是简单测试。

将Settings中的CODE nGEN中,Use Generate Dependency Objs修改为Yes,Resource Generation修改为:SaveAsBinaryFile。

settings

Windows下默认使用wogl.cfg配置文件,我们将其复制一份,命名为wogl_lib.cfg。修改BUILD_TYPE=lib,用于编译*.lib而不是可执行文件。

将此模板分发给各个开发人员用于后续开发。

子工程开发

获取到模板工程后,就可以进行子工程开发了。

ob

右键Cformat,生成代码。

code

打开代码文件夹中的*.mak文件,删除字段中已经在顶级工程中存在了的内容。

选择wogl_lib.cgf配置,然后点击Build Only

build only

编译生成*.lib文件

lib

工程集成

一旦所有团队完成设计,集成者可以把子工程集成到顶级工程模板中。有两种方法

1、将子工程集成到大工程中
2、编译每个子工程的lib文件,然后用修改后的Makefile编译大工程

此处使用第2中方法。

你需要合并一个顶级工程和所有子工程。

files

至于怎么操作

得加钱

4、执行顶级工程的Build Only

效果为:

result

在顶级工程中GO是没有内容的,只有*.lib中有,那么可以确定是集成编译操作。

obj版

接下来尝试使用*.obj文件进行替换。*.obj进行链接后得到的就是 *.lib。

工程

首先准备两个测试工程,一个图形对象只有声明,一个包含所有实现。

1、对于包含完整实现的工程,按照标准的程序方式编译生成程序。

配置为wogl.cfg

subproject

编译完成之后在代码所在的文件夹下有个objs.wogl文件夹,此文件夹下有编译生成的所有我们需要的*.obj。

2、对于只包含声明的根工程,首先先生成代码,然后根据上一篇的方式进行合并。

将子工程的*.obj文件复制到根工程的objs.wogl文件夹下,如果没有此文件夹就创建一个。

root

编译会出现警告,直接忽略。编译完成之后

result

根工程中没有实现,没有lib库,只有*.obj,所以我们认为实现此目标了。

自动化

对于这两篇提到的集成编译方法,对于习惯了VAPS XT的低代码设计人员来说有点复杂,所有考虑设计一个软件,将此流程自动化,以简化流程操作。

集成编译的流程为

flow

软件是提供给客户使用的,不公开。

注意

  • 如果使用的是已有的界面,注意尺寸数值要统一
  • 此方案调用的是Format

下一篇:VAPS XT入门教程19.11:编译器问题

技术交流群,欢迎加入讨论。这个圈子很小,大佬可能没兴趣加这些群聊社区之类的。所以只能带你入门,当然,欢迎大佬指导

qq 672991841


VAPS XT入门教程19.10:大工程集成开发与编译
https://blog.jackeylea.com/vapsxt/integration-compile-vapsxt-large-project
作者
JackeyLea
发布于
2021年10月8日
许可协议