一个实用批处理指令制作过程分享:Perforce更新完后打开VisualStudio再编译
需求来源
笔者从事Unreal游戏客户端工作,使用VisualStudio开发,然后经常干一个事:就是使用Perforce(或svn)拉取最新代码,(一些时间后)拉取完之后然后打开 项目.sln,即VisualStudio, (一些时间后)再点击 VisualStudio 中的Build按钮开始编译引擎。这很重复...
然后因为新年伊始告诉自己不要再做重复的事,无论如何也要抽时间解决重复的事。相信很多同学都有这种体验...
需求分析
整体的需求是:使用Perforce先更引擎的代码,再更项目的代码,再打开.sln,再点击build。就是必须得按照顺序,因为依赖等关系,如果不按照顺序可能会出现编译不过等奇葩问题。因为我们使用Perforce,Perforce跟svn一样是需要登录的,于是那么肯定需要设置账号&WorkSpace等个人数据信息。
拆分需求如下:
- 设置登录Perforce相关账号信息
- 更新A目录下的资源完成后,再更新B目录下代码
- 打开.sln
- 点击Build
问题分析
对于上述需求第一个问题很简单,百度上都有答案,也很简单.但是还是给出如下参考图, 注意WorkSpace的设置,指令比较奇怪,是P4CLIENT。

set P4PORT=XX.X.XX.111:1666
set P4USER=ceshideng
set P4PASSWD =ceshimima
set P4CLIENT=WorkA
第二个问题就是如何顺序更新目录,这个事情可以拆分为2个:更新指定目录&顺序执行。
- 更新指定目录

p4 sync //Projects/XXX2019/XXX/XXX/...
注意这里的目录得是Depot中的,并且后面跟上三个点。。
因为这里我要顺序执行更新两个目录得资源,给出上述指令,会同时执行,没达到我想要的结果。查了一下,一个非常重要的知识点,call 后面跟指令,可以顺序执行指令,因此需要 call。 于是得出
call p4 sync //Projects/XXX2019/XXX/XXX/...
然后难点就是第三个问题和第四个问题,通过批处理打开一个exe很简单,但是这里的.sln并不是exe,并且还要"点击Build"。一开始时候笔者搞这个花了很久。得出要解决这两个问题需要理解devenv的命令用法。
devenv是VisualStudio的可执行程序,一般安装在“C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE”下。简单用法如下:
Devenv SolutionName /configcode
这里需要注意configcode 的用法,我们这里因为需要编译后启动程序,所以需要使用 /run,这里configcode的参数用法可以参考:https://www.cnblogs.com/cindy-hu-23/p/3561081.html
于是第三个问题和第四个问题要合并为一个问题:通过批处理如何build .sln文件。
批处理直接调用Microsoft Visual Studio 8\Common7\IDE\ 目录内的 devenv.exe ,具体详细用法可以如下:
call "C:Microsoft Visual Studio\2019\Professional\Common7\IDE\devenv.exe" H:\目录层次结构\XXX.sln /run
完整主要指令如下:
set P4PORT=10.1.168.XXX:8666
set P4USER=xxxdeng
set P4PASSWD =ceshimima
set P4CLIENT=WorkA
echo 开始更引擎:%date%
call p4 sync //Projects/XXX/UE4NEXT_Stable/...
echo 开始更XGame
call p4 sync //Projects/XXX/Trunk/XGame/...
echo Perforce更新完成 ,开始Run工程
call H:
call cd H:\WorkA\XXX\
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\devenv.exe" XGame.sln /run
echo Build Suc...
pause
一个非常实用的指令搞定了...有需要的可以自己扩展。
扩展
- 可以加上定时,接下来多少天内每天晚上啥时候执行
- 判断.sln是否打开过,如果打开就关闭再更新资源等
- 如果更新时候发现冲突等,使用指令优先使用线上资源。
补充:
关于devenv.exe所在路径,可以通过Everything查找。如下:

参考:
一个实用批处理指令制作过程分享:Perforce更新完后打开VisualStudio再编译的更多相关文章
- 【Android开发】找乐,一个笑话App的制作过程记录
缘起 想做一个笑话App的原因是因为在知乎上看过一个帖子,做Android可以有哪些数据可以练手,里面推荐了几个数据开放平台.在这些平台中无一不是有公共的笑话接口,当时心想这个可以拿来练手啊,还挺有意 ...
- 页面用一个遮罩层显示加载,加载完后隐藏该div
<div id="background" class="background" style="display: none; "> ...
- [PCB制作] 1、记录一个简单的电路板的制作过程——四线二项步进电机驱动模块(L6219)
前言 现在,很多人手上都有一两个电子设备,但是却很少有人清楚其中比较关键的部分(PCB电路板)是如何制作出来的.我虽然懂点硬件,但是之前设计的简单系统都是自己在万能板上用导线自己焊接的(如下图左),复 ...
- Android实训案例(九)——答题系统的思绪,自己设计一个题库的体验,一个思路清晰的答题软件制作过程
Android实训案例(九)--答题系统的思绪,自己设计一个题库的体验,一个思路清晰的答题软件制作过程 项目也是偷师的,决心研究一下数据库.所以写的还是很详细的,各位看官,耐着性子看完,实现结果不重要 ...
- [分享] WIN7x64封装体积小于4G制作过程
raymond 发表于 2015-11-1 18:27:17 https://www.itsk.com/thread-359041-1-1.html 前人栽树,后人乘凉!感谢各位大神的作品!我只是按部 ...
- 超漂亮的CSS3按钮制作教程分享
要求 必备知识 基本了解CSS语法,初步了解CSS3语法知识. 开发环境 Adobe Dreamweaver CS6/Chrome浏览器 演示地址 演示地址 利用CSS3属性制作按钮,我们只需要用到G ...
- Linux ARM交叉编译工具链制作过程【转】
本文转载自:http://www.cnblogs.com/Charles-Zhang-Blog/archive/2013/02/21/2920999.html 一.下载源文件 源代码文件及其版本与下载 ...
- rpt水晶报表制作过程
原文:rpt水晶报表制作过程 最近公司安排一个以前的项目,里面需要用到水晶报表,由于原来做这个项目的同事离职,所在公司的同事报表做成了rdlc类型的,而这类报表在加载的时候很难动态的从数据库加载数据, ...
- 一个能拖动,能调整大小,能更新bind值的vue指令-vuedragx
一. 背景说明 开发一个可自定义组件化门户配置页面,期间采用了vue框架作为前端视图引擎,作为一个刚入手vue的萌新,开发第一个功能就遇到了拦路虎.需要一个拖动并且可改变大小的容器盒子.当时查看vue ...
随机推荐
- javascript中逻辑运算(||,&&,!)
作为一个后端开发的程序员,一直就对JavaScript情有独钟,作为一门前后端通吃的语言,必须赞一下.而且之前很长一段时间都有在做JavaScript,一路都是和ie8死磕,磕完又找低版本的谷歌磕,坑 ...
- Swoole 中使用 Context 类管理上下文,防止发生数据错乱
前面的文章中,我们说过:不能使用类静态变量 Class::$array / 全局变量 global $_array / 全局对象属性 $object->array / 其他超全局变量 $GLOB ...
- XPTH定位总结
xpath定位总结:nodename 选取此节点的所有子节点. / :从根节点选取.绝对定位 //:从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置. 相对定位(推荐使用相对定位) . :选取 ...
- 初识python: 文件操作
1.文件的打开模式: r:读模式:w:写模式:a:追加模式,在文件最后写入内容;r+:读写模式,读取文件内容,并在末尾添加记录:w+:写读模式,新建文件并添加记录:a+:追加写读:rb:以二进制格式读 ...
- spring-Ioc学习笔记
spring 是面向Bean的编程 Ioc (Inversion of Control) 控制反转/依赖注入(DI:Dependency Injection) Aop(Aspect Oriented ...
- nginx - win系统启动一闪而过 ,服务没有启动成功
这种现象是因为配置文件里配置的服务监听端口被占了
- 利用python绘制分析路易斯安那州巴吞鲁日市的人口密度格局
前言 数据来源于王法辉教授的GIS和数量方法,以后有空,我会利用python来实现里面的案例,这里向王法辉教授致敬. 绘制普查人口密度格局 使用属性查询提取区边界 import numpy as np ...
- EgLine V0.3—LVGL官方拖拽式UI编辑工具(可导出代码)
** EdgeLine ** 是LVGL官方团队退出的一款拖拽式UI编辑工具,现在还处于测试间断,目前最新版本为v0.3,已经可导出代码. 注意: 使用该软件需要注册lvgl账号,这一步可能需要代理 ...
- HDU 1106 (1.3.5) 排序 (C语言描述)
排序 Problem Description 输入一行数字,如果我们把这行数字中的'5'都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以'0'开头,这些头部的'0'应该被忽略掉,除非 ...
- HW防守 | Linux应急响应基础
最近也是拿到了启明星辰的暑期实习offer,虽然投的是安服,但主要工作是护网,昨天在公众号Timeline Sec上看到有一篇关于护网的文章,所以在这里照着人家写的在总结一下,为将来的工作打点基础. ...