一个build脚本欣赏

2023-10-26

build scripts

My basic build.bat file looks like this:

@echo off
erase ThemeChanger*.exe
copy ../Loader/ArmRel/Loader.exe ./
copy ../Setupdll/ArmRel/setup.dll ./
copy ../ArmRel/ThemeChanger.exe ./
copy ../ThemeChangerChTr/ArmRel/*.mui ./
copy ../ThemeChangerDa/ArmRel/*.mui ./
copy ../ThemeChangerEn/ArmRel/*.mui ./
copy ../ThemeChangerFr/ArmRel/*.mui ./
copy ../ThemeChangerIt/ArmRel/*.mui ./
copy ../ThemeChangerPo/ArmRel/*.mui ./
copy ../ThemeChangerGe/ArmRel/*.mui ./
"C:/Program Files/Windows CE Tools/wce300/SMARTPHONE 2002/Tools/cabwizsp.exe" Theme_Changer_SP2002.STRONGARM.inf /postxml postinstall.xml
erase Theme_Changer_SP2002.STRONGARM.cab
rename Theme_Changer_SP2002.cab Theme_Changer_SP2002.STRONGARM.cab
ezsetup -l english -i ThemeChanger.ini -r readme.txt -e eula.txt -o ThemeChanger_setup.exe
tagnzip ThemeChanger_setup ThemeChanger Theme_Changer_SP2002.STRONGARM.cab

I copy the built files over, note don't do this in the Post-Build step of EVC as the files won't be signed. I then build my cab manually, which I find is the most powerful. ezsetup is a setup exe creater which is free, if you don't need to install files on the PC I highly recommend it, it creates exe's MUCH smaller than commercial offerings I have used.
Lastly I zip it up using pkzip 2.50 (which has long filename support) and its ready for uploading to the web.

and tagnzip looks this this:

@echo off

rem move %1.exe %2MAJOR_MINOR.exe

echo move %1.exe %2> t1.bat
grep "MAJOR" ../majorminor.h | cut -d" " -f3 >>t1.bat
echo _>> t1.bat
grep "MINOR" ../majorminor.h | cut -d" " -f3 | tr -d "L""" >>t1.bat
echo .exe >> t1.bat
tr -d '/n/r' < t1.bat > t2.bat
erase t1.bat
call t2.bat
erase t2.bat

rem pkzip -a -n+ %2MAJOR_MINOR.zip %2MAJOR_MINOR.exe

echo pkzip -a -n+ %2%lt; t1.bat
grep "MAJOR" ../majorminor.h | cut -d" " -f3 >>t1.bat
echo _>> t1.bat
grep "MINOR" ../majorminor.h | cut -d" " -f3 | tr -d "L""" >>t1.bat
echo .zip >> t1.bat
echo %2>> t1.bat
grep "MAJOR" ../majorminor.h | cut -d" " -f3 >>t1.bat
echo _>> t1.bat
grep "MINOR" ../majorminor.h | cut -d" " -f3 | tr -d "L""" >>t1.bat
echo .exe >> t1.bat
tr -d '/n/r' < t1.bat > t2.bat
erase t1.bat
call t2.bat
erase t2.bat

rem move %3 %2MAJOR_MINOR.cab

echo move %3 %2> t1.bat
grep "MAJOR" ../majorminor.h | cut -d" " -f3 >>t1.bat
echo _>> t1.bat
grep "MINOR" ../majorminor.h | cut -d" " -f3 | tr -d "L""" >>t1.bat
echo .cab >> t1.bat
tr -d '/n/r' < t1.bat > t2.bat
erase t1.bat
call t2.bat
erase t2.bat

@echo on

The native windows ports of these UNIX tools (tr, grep, and cut) are availble here: UnxUtils. Getting a commandline version of pkzip 2.50+ is a bit trickier, as I don't believe its available now.

My .inf file looks like this:

[Version]
Signature = "$Windows NT$"
Provider = "Rikisoft" ; maximum of 30 characters, full app name will be "<Provider> <AppName>"
CESignature = "$Windows CE$"

[CEStrings]
AppName = "Theme Changer" ; maximum of 40 characters, full app name will be "<Provider> <AppName>"
InstallDir=%CE1%/ThemeChanger/ ; /PSM/Program Files/ThemeChanger/

[SourceDisksNames]
1 = , "Common Files",,

[SourceDisksFiles]
setup.dll = 1
ThemeChanger.exe = 1
ThemeChanger.exe.0404.mui = 1
ThemeChanger.exe.0406.mui = 1
ThemeChanger.exe.0407.mui = 1
ThemeChanger.exe.0409.mui = 1
ThemeChanger.exe.040c.mui = 1
ThemeChanger.exe.0410.mui = 1
ThemeChanger.exe.0415.mui = 1

[DefaultInstall]
CopyFiles = CopyToThemeChanger
CEShortcuts = Shortcuts1
CESetupDLL = setup.dll

[DestinationDirs]
CopyToThemeChanger = 0, %InstallDir%
Shortcuts1 = 0,%CE11% ; Install in /PSM/Windows/Start Menu/

[CopyToThemeChanger]
"ThemeChanger.exe", ThemeChanger.exe
"ThemeChanger.exe.0404.mui", ThemeChanger.exe.0404.mui
"ThemeChanger.exe.0407.mui", ThemeChanger.exe.0407.mui
"ThemeChanger.exe.0406.mui", ThemeChanger.exe.0406.mui
"ThemeChanger.exe.0409.mui", ThemeChanger.exe.0409.mui
"ThemeChanger.exe.040c.mui", ThemeChanger.exe.040c.mui
"ThemeChanger.exe.0410.mui", ThemeChanger.exe.0410.mui
"ThemeChanger.exe.0415.mui", ThemeChanger.exe.0415.mui

[Shortcuts1]
%AppName%,0,ThemeChanger.exe

it's all pretty standard, note the shortcut which points to the loader. If your having trouble with it there are plenty of helpful pages on the web.
And lastly my .ini file

[CEAppManager]
Version = 1.0
Component = Theme Changer

[Theme Changer]
Description = "Advanced .CAB Theme Changer"
Uninstall = "Rikisoft Theme Changer"
CabFiles = Theme_Changer_SP2002.STRONGARM.cab

Again run of the mill.

General Tips

Lastly I include some tips and tricks I've picked up, most people won't need them, but from time to time they might answer someones question, so keep them in mind, you might use them one day.

 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个build脚本欣赏 的相关文章

随机推荐

  • 软件测试面试HR常问问题及回答技巧,看完丝毫不需要慌,稳过

    前言 当你去一家公司面试 可能会经历好几轮的面试 然后到HR面试 很多公司的HR都有一票否决权 可以直接决定录不录用你 就算你的技术很硬 实例很强 HR不满意还是可以不录用你 尤其对于技术一般的人 HR的这关面试就显得极为重要了 我这个里准
  • memtool使用指南

    最近在用Infineon Memtool 的过程中遇到的一点问题 看了英文help解决了 现总结一下memtool的使用指南 1 target选择change 选择芯片型号 添加配置文件 打开电源 2 对右边的各个rom进行remove a
  • GNU Linux核心命令和工具的源代码路径

    GNU Linux核心命令和工具的源代码路径 2015 08 20 09 44 57 分类 LINUX 原文地址 GNU Linux核心命令和工具的源代码路径 作者 ubuntuer Commands and Utilities The t
  • Linux系统下安装Redis-7.0.0

    一 准备工作 1 下载安装新版的gcc编译器 redis的安装需要gcc环境的支持 所以首先要检查下服务器上时候已经安装了gcc环境 离线安装gcc包 执行安装命令 rpm ivh rpm nodeps force 1 1 下载Redis客
  • 前端面试题(js篇)

    1 解释一下什么是闭包 什么是闭包 函数使用了不属于自己的局部变量 函数套函数 里面函数使用了外面函数定义的变量 闭包的作用 避免全局污染 闭包的缺点 使用过多会造成内存泄漏 占用的内存释放不掉 2 js中的本地存储有哪些 区别是什么 1
  • QT日常报错解决方案

    日常报错 3 1 undefined reference to vtable vtable 表示的是虚表 这个错误出现时 请检查你的父类所有虚函数是否实现 或者子类是否把父类的虚函数都处理完 注意 析构函数也算 有时候一开始没有添加Q OB
  • 专业程序员开发-老狼孩插件懒人精灵版

    老狼孩插件懒人版 综合分类版 v1 7 5有新版啦 完全开放 免费使用 全新改版 1 优化 调试输出默认延迟1000毫秒 2 新增 更新类 阿里云json版热更新 定时关闭界面自动更新 无界面自动更新 3 新增 更新类 坚果云json版热更
  • 服务器太小是什么情况 显示小,服务器内存显示的比实际的小

    服务器内存显示的比实际的小 内容精选 换一换 弹性云服务器创建成功后 使用free m命令查询内存大小 查询结果与实际配置不符 较之创建时的配置要小一些 示例 假设创建该弹性云服务器时 配置的实际内存大小为4194304KB 即4096MB
  • QT之QChart的简介

    QT之QChart的简介 1 创建图表 2 设置图表标题和坐标轴标签 3 定制图表样式 4 显示图表 5 保存图表为图像 QChart 是 Qt Charts 模块中的一个主要类 用于创建和管理图表 QChart 提供了一组用于创建各种类型
  • Vue实现面包屑功能(el-breadcrumb)

    vue3 elementPlus 实现面包屑功能 文章后面附效果图 数据结构 首先展示一下数据基础结构 红色框框是默认存在的数据 其他数据就是通过选中侧边栏菜单进行数据插入 关键数据字段为 path meta 准备侧边栏 首先需要自己准备一
  • 常用对象类型之间的转换

    ads point 是原来的ADS 编程中定义的一种数据类型 其定义为 typedef ads real ads point 3 而ads real 则被定义为 typedef double ads real 可以看出 ads point
  • 前端知识14:webpack打包图片资源

    需要下载url loader 和 file loader两个包 前者依赖于后者 安装 npm i url loader file loader D 图片在css中使用的场景 注意图片在src目录下 注意图片路径的写法用的是相对路径 引用插件
  • C++ vector 容器浅析

    C STL 教程 C STL 教程 C vector 容器浅析 C vector 容器浅析 个人理解 vector就是一个模板类 具有元素多少可以变化的优点 一般为了根据数据类型 会选择显式实例化 下为一个利用vector模板 将一维数组转
  • 【华为OD统一考试B卷

    题目描述 一群大雁往南飞 给定一个字符串记录地面上的游客听到的大雁叫声 请给出叫声最少由几只大雁发出 具体的 1 大雁发出的完整叫声为 quack 因为有多只大雁同一时间嘎嘎作响 所以字符串中可能会混合多个 quack 2 大雁会依次完整发
  • blender 线框效果/Line Art

    Blender 2 93 新功能 Line Art 效果 哔哩哔哩 bilibilihttps www bilibili com video BV19Z4y1w7mk from search seid 1496511710922071136
  • 在Linux系统如何修改profile文件后立即生效呢?

    方法1 让 etc profile文件修改后立即生效 可以使用如下命令 etc profile 注意 和 etc profile 有空格 方法2 让 etc profile文件修改后立即生效 可以使用如下命令 source etc prof
  • go语言字符类型byte与rune

    字符串中的每一个元素叫做 字符 在遍历或者单个获取字符串元素时可以获得字符 Go语言的字符有以下两种 一种是 byte 型 是 uint8 的别名 代表了 ASCII 码的一个字符 另一种是 rune 类型 代表一个 UTF 8 字符 当需
  • Java中JDBC的数据库连接池

    数据库连接池 池参数 所有池参数都有默认值 初始大小 10个 最小空闲连接数 3个 增量 一次创建的最小单位 5个 最大空闲连接数 12个 最大连接数 20个 最大的等待时间 1000毫秒 四大连接参数 连接池也是使用四大连接参数来完成创建
  • 快速+完美+准确解决SpringBoot项目打包后的SNAPSHOT.jar中没有主清单属性的问题

    目录 问题再现 问题解决 结果 问题再现 xxxx 0 0 1 SNAPSHOT jar中没有主清单属性 问题解决 1 出问题的pom xml文件
  • 一个build脚本欣赏

    build scripts My basic build bat file looks like this echo off erase ThemeChanger exe copy Loader ArmRel Loader exe copy