如何基于SVN版本号触发nmake .mak文件的构建目标?
在NMake中基于SVN版本号触发构建的实现方案
完全可行,核心思路是把SVN版本号作为额外的依赖条件,和现有代码文件的依赖结合起来,就能同时满足你提出的三个场景需求。
具体实现步骤:
生成记录SVN版本的标记文件
我们需要一个文件存储当前工作副本的SVN最后变更版本号,比如创建.svn_rev文件。在NMake脚本中添加专门目标来生成或更新这个文件:.svn_rev: svn --info --show-item last-changed-revision > $@这个目标会调用SVN命令获取当前版本号并写入
.svn_rev,$@是NMake自动变量,代表当前目标文件名。修改my_target的依赖列表
把.svn_rev加入原有的my_target依赖中,让NMake同时检查代码依赖和版本文件的变化:my_target: a_second_target a_third_target .svn_rev ... 原有的构建动作 ...
适配场景的逻辑说明:
- 场景1:无代码变更,版本号仍为12345
.svn_rev文件内容和上次一致,a_second_target、a_third_target也无变更,NMake判定所有依赖未更新,不会触发my_target构建。 - 场景2:代码有变更,版本号仍为12345
代码变更会触发a_second_target或a_third_target更新,只要有一个依赖变化,NMake就会执行my_target的构建动作,不受.svn_rev状态影响。 - 场景3:无代码变更,版本号提升至12347
SVN命令返回的版本号更新,.svn_rev文件内容变化,NMake检测到依赖更新,会触发my_target构建。
注意事项:
- 确保SVN客户端已加入系统PATH环境变量,否则NMake无法找到
svn命令。 - 把
.svn_rev加入SVN的忽略列表(设置svn:ignore属性),避免临时文件被提交到仓库。 - 确保执行NMake的用户有权限读取SVN仓库信息,并能在当前目录写入文件。
内容的提问来源于stack exchange,提问作者Helena
相关产品推荐
相关产品推荐

