zoukankan      html  css  js  c++  java
  • ue4 build configuration的解释

    ue4的build系统,继承并发展了3代的一如既往的复杂。。

    一、每个configuration由两部份组成:【(性能)模式】+【(内容)组成】

    模式有:Debug,DebugGame,Development,Shipping,Test

      Debug:引擎和游戏项目都是debug编译,最适合调试,不做任何优化,运行速度也是最慢的

      DebugGame:只有游戏项目用debug,引擎有适度优化,调试时某些变量看不到了

      Development:引擎和游戏项目都优化了,调试时某些变量看不到。运行速度适中,一般开发时都用这个,特别是编辑器也是用的这种模式。

      Shipping:发行版,极致优化,估计调试信息都没了。

      Test:包含额外的测试代码。

    组成有:空(Game),Client,Server,Editor

      空:实际意义是【未指定】,也就是默认的意思(而不是什么都没有的空),包含客户端和服务器代码,不包含编辑器。

      Client:只包含客户端

      Server:只包含服务器

      Editor:包含所有三项。

    注意:solution层级的“空”对应到project层级的名字是"Game",也就是默认为游戏(而非编辑器)的意思。

    所以Debug_Game和DebugGame完全不是一回事,后者实际只是DebugGame_(空)的简化。

    二、用launcher下载的预编译版Editor建立的工程,和用源码自编译版Editor建立的工程,结构会不一样。

    预编译版Editor的工程只有少数几种configuration,且引擎工程仅用来阅读和调试,不能编译。

    源码版工程分两种情况,1是引擎(如上图),包含了全部【模式+组成】的configuration组合,并且在构建时也会编译引擎

    2是自己的工程,模式是全的,但组成只有Game和Editor两种,也就是不分纯客户端和纯服务器了

    三、一些实现细节:

    1、实际的编译是通过命令:

    D:prgUnrealEngineEngineBuildBatchFilesBuild.bat UE4Client Win64 Debug -waitmutex

    D:prgUnrealEngineEngineBuildBatchFilesBuild.bat usbp Win64 Debug "$(SolutionDir)$(ProjectName).uproject" -waitmutex

    前者是编引擎,后者是编自己的工程,bat里再调用:

    ....EngineBinariesDotNETUnrealBuildTool.exe %* -DEPLOY

    参数意义如下:

    REM %1 is the game name
    REM %2 is the platform name
    REM %3 is the configuration name

    可以对比不同的组合:

    Debug_Game:D:prgUnrealEngineEngineBuildBatchFilesBuild.bat UE4Game Win64 Debug -waitmutex

    Debug_Editor:D:prgUnrealEngineEngineBuildBatchFilesBuild.bat UE4Editor Win64 Debug -waitmutex

    DebugGame_Game:D:prgUnrealEngineEngineBuildBatchFilesBuild.bat UE4Game Win64 DebugGame -waitmutex

    2、第1参数game name,表示的是一个UEBuildTarget,即构建目标,所谓目标也就是exe、dll这样的文件,毕竟构建来构建去,最终目的就是生成这些可执行文件。

    UEBuildTarget总共有5类,分别由5个子类表示,正好是上面所说的组成里的4类,再加1个叫Program的类(各种命令行工具)

    一个UEBuildTarget里包含两类信息,一是包含的模块UEBuildModule,二是构建规则,规则又分两类,即TargetRules和ModuleRules

    其中TargetRules就是各相应工程目录下对应*.Target.cs文件描述,比如在Engine/Source目录下,就有4个文件分别对应各自的name,UE4Game/UE4Editor/UE4Client/UE4Server.Target.cs 

    而ModuleRules则是各*.Build.cs文件

    简单来说,一个ModuleRules定义了一个具体的模块文件(exe/dll)怎么构建,比如要编译哪些源文件

    而一个TargetRules定义了一个抽象的Target,由哪些模块组合而成,比如说一个Editor,实际对应着一个exe和一堆dll

    3、这些不同的UEBuildTarget类型,最直观的差别就是它们分别定义了各自的预处理器宏

    如UEBuildEditor里:

    OutCPPEnvironmentConfiguration.Definitions.Add("UE_EDITOR=1");

    就添加了UE_EDITOR定义,这就会导致代码里大段大段被#if UE_EDITOR扩起来的地方被编译

    而在代表纯游戏的UEBuildGame里,就不会编译那些代码,以减少体积和开销。

    四、新建一个项目,实际生成两样东西:

    1、game:是一个exe,而且以工程名命名,所有静态库全链接在一起,基本没有dll依赖,都看不出跟引擎有什么关联

    2、editor:是一个dll,但是名字叫UE4Editor-xxxx.dll,实际上是做为UE4Editor.exe的一个插件,启动的时候运行的是引擎的exe

  • 相关阅读:
    【BZOJ4367】[IOI2014]holiday假期 分治+主席树
    【BZOJ1264】[AHOI2006]基因匹配Match DP+树状数组
    【BZOJ4379】[POI2015]Modernizacja autostrady 树形DP
    【BZOJ4380】[POI2015]Myjnie 区间DP
    【BZOJ4382】[POI2015]Podział naszyjnika 堆+并查集+树状数组
    【BZOJ4384】[POI2015]Trzy wieże 树状数组
    【BZOJ4388】JOI2012 invitation 堆+线段树+并查集(模拟Prim)
    【BZOJ4550】小奇的博弈 博弈论
    Sqlserver列出所有数据库名,表名,字段名
    聚合与组合的区别?
  • 原文地址:https://www.cnblogs.com/wellbye/p/5778413.html
Copyright © 2011-2022 走看看