• 一个实用批处理指令制作过程分享:Perforce更新完后打开VisualStudio再编译


    需求来源

    笔者从事Unreal游戏客户端工作,使用VisualStudio开发,然后经常干一个事:就是使用Perforce(或svn)拉取最新代码,(一些时间后)拉取完之后然后打开 项目.sln,即VisualStudio, (一些时间后)再点击 VisualStudio 中的Build按钮开始编译引擎。这很重复...
    然后因为新年伊始告诉自己不要再做重复的事,无论如何也要抽时间解决重复的事。相信很多同学都有这种体验...

    需求分析

    整体的需求是:使用Perforce先更引擎的代码,再更项目的代码,再打开.sln,再点击build。就是必须得按照顺序,因为依赖等关系,如果不按照顺序可能会出现编译不过等奇葩问题。因为我们使用Perforce,Perforce跟svn一样是需要登录的,于是那么肯定需要设置账号&WorkSpace等个人数据信息。
    拆分需求如下:

    1. 设置登录Perforce相关账号信息
    2. 更新A目录下的资源完成后,再更新B目录下代码
    3. 打开.sln
    4. 点击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 常用的另一个指令:Reconcile Offline Work
    call p4 reconcile //Projects/Game2022/XX/XX/Source/...
    

    参考:


    __EOF__

  • 本文作者: 不三周助
  • 本文链接: https://www.cnblogs.com/u3ddjw/p/15886176.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    2022牛客多校第一场解题报告
    【老生谈算法】matlab实现三项桥式全控整流的性能研究——全控整流
    Qt设计一个自定义的登录框窗口
    [含实训报告+源码等]javaweb花店销售管理系统[包运行成功]Java毕业设计计算机毕设
    .env[mode]文件中如何添加注释
    晚稻季湛江廉江 国稻种芯·中国水稻节:广东绿色田野农人忙
    【Egg从基础到进阶】二:安装本地Mysql
    图的应用2.0-----最短通路问题(Dijkstra和Floyd算法)
    MySql(随记)
    基于微信小程序的汽车租赁系统源码
  • 原文地址:https://www.cnblogs.com/u3ddjw/p/15886176.html