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:\prg\UnrealEngine\Engine\Build\BatchFiles\Build.bat UE4Client Win64 Debug -waitmutex
D:\prg\UnrealEngine\Engine\Build\BatchFiles\Build.bat usbp Win64 Debug "$(SolutionDir)$(ProjectName).uproject" -waitmutex
前者是编引擎,后者是编自己的工程,bat里再调用:
..\..\Engine\Binaries\DotNET\UnrealBuildTool.exe %* -DEPLOY
参数意义如下:
REM %1 is the game name
REM %2 is the platform name
REM %3 is the configuration name
可以对比不同的组合:
Debug_Game:D:\prg\UnrealEngine\Engine\Build\BatchFiles\Build.bat UE4Game Win64 Debug -waitmutex
Debug_Editor:D:\prg\UnrealEngine\Engine\Build\BatchFiles\Build.bat UE4Editor Win64 Debug -waitmutex
DebugGame_Game:D:\prg\UnrealEngine\Engine\Build\BatchFiles\Build.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
ue4 build configuration的解释的更多相关文章
- simplified build configuration
http://blogs.msdn.com/b/saraford/archive/2005/08/16/452411.aspx Did you know… That you can hide the ...
- Xcode多种Build Configuration配置使用
Build Configuration? Xcode默认会有2个编译模式,一个是Debug,一个是Release.Release下不能调试程序,编译时有做编译优化,会比用Debug打包出来的运行快,另 ...
- Xcode添加build configuration
图片转载自:Adding a build configuration in Xcode
- Xcode的多种Build Configuration
一: 建多个Configuration的目的. 多套域名打包. 1 开发时的域名. 2 内测时的域名. 3 公测时的域名. 4 企业版的域名. 5 APP Store的域名. 通过注释的方式,容易出错 ...
- Could not determine which “make” command to run. Check the “make” step in the build configuration
环境: QT5.10 VisualStudio2015 错误1: Could not determine which “make” command to run. Check the “make” s ...
- [UE4]The global shader cache file missing 运行错误解决办法
UE4项目在VS中对项目代码编译时报如错,找了好久在UE4论坛上查到了别人的解决方案,贴出来仅供大家参考. 看到一位开发者解释出错的原因如下: There are a number of build ...
- 《深入理解mybatis原理》 Mybatis初始化机制具体解释
对于不论什么框架而言.在使用前都要进行一系列的初始化,MyBatis也不例外. 本章将通过下面几点具体介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XM ...
- UE4游戏开发基础命令
在个人的Unrealengine账户中关联自己的GitHub账户成功之后,就可以访问UE4引擎的源码了. git clone -b release https://github.com/EpicGam ...
- Nutch的nutch-default.xml和regex-urlfilter.txt的中文解释
nutch-default解释.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl&qu ...
随机推荐
- session与cookie的区别---
session和cookie的最大区别在于session是保存在服务端的内存中, 而cookie保存与浏览器或客户端文件里面: session是基于访问的进程,记录了一个访问的开始到结束,当浏览器或进 ...
- HTTP响应状态码记录
HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展.目前在WWW中使用的是HTTP/1.0 ...
- Win32API界面库 - Project wheels 工程基础部分完成
离上次发博文过去了好久,先是要忙一个机器人的项目,然后就是部门的事情和考试周复习,然后就到了考试周,趁着复习的间隙,拾起了寒假时候抄的界面库,修掉了从前的bug. bug1 控件显示问题 当初抄这个库 ...
- linux下开启mysql慢查询,分析查询语句
一,为什么要开启这个查询呢? 数据库是很容易产生瓶颈的地方,现在Nosql大家讨论这么热,估计都被数据库搞郁闷了.mysql中最影响速度的就是那些查询非常慢的语句,这些慢的语句,可能是写的不够合理或者 ...
- 一张图教你搞定Mac App Store 应用安装包存储路径
还在为找不到App Store 更新应用的安装文件发愁吗?是否有过多个人同时需要更新Xcode,都自己下载一次的痛苦经历? 大家都知道通过苹果服务器下载东西,确实难耐!AppStore 甚至都经常提示 ...
- 磁盘IO的性能指标
磁盘IO的性能单位: bps (byte/s) 每秒钟 byte 数 kbps = bps / 1024 mbps = kbps / 1024 相关计算可以参考下面代码: https://git ...
- .net一次连接执行多条sql语句
方法一: string SQLString="select 1; select 2;"; using (OdbcConnection connection = new OdbcCo ...
- 关于Listview布局的一点经验
1.尽量是给item一个固定高度,最外层不要设高度,里面套一层设置一个固定高度:如果用wrap_content的话,之后用alignTop等会出奇怪的问题. 2.如果要使用alignTop align ...
- hive 全局排序
不分发数据,使用单个reducer ; select * from dw.dw_app where dt>='2016-09-01' and dt <='2016-09-18' order ...
- log4j按级别输出日志文件
log4j.properties: BASE_DIR= /home/admin/preprocess-tmc-city/logs log4j.rootLogger=debug,stdout,debug ...