UE4 的功能被分成了很多的模块,在API文档里每个类都有 Module 这个属性(值为模块名)
每个模块使用其他模块要在Build.cs里导入,像vs里的引入库。
在构建时 PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });//引入模块
或:PrivateDependencyModuleNames.AddRange(new string[] { "Sockets"});

UnrealBuildTool
使用C#写成,在源码工程里有这个,UE4使用这个项目配合Build.cs编译UE4。
UE4项目编译时会先调用构建工具,再跟据平台调用相应的编译器,以及添加自己的一些特殊定义。

  获取目录

var basePath = Path.GetDirectoryName(RulesCompiler.GetModuleFilename(this.GetType().Name));//项目目录
string path = Path.GetFullPath(Path.Combine(ModuleDirectory, "../../Test/"));//模块目录  插件常用

  引入外部库

PublicIncludePaths.Add(Path);//外部库头文件目录
PublicLibraryPaths.Add(Path); //.lib目录
PublicAdditionalLibraries.Add("SixAxisSlave_x64.lib");//要链接的.lib文件

  动态DLL的加载

PublicDelayLoadDLLs.Add("opencv_world320.dll");//运行时要加载的DLL
RuntimeDependencies.Add(new RuntimeDependency(dllPath+ "opencv_world320.dll"));//打包时要拷贝的DLL 要注意使用的路径就是拷贝后路径

模块开发
1、模块继承 IModuleInterface 实现自己的 IMyModule 接口
2、实现自己IMyModule接口
4、IMPLEMENT_MODULE <-有dllexport 关键字  导出模块接口   说起来IMPLEMENT_PRIMARY_GAME_MODULE 游戏项目内也有 游戏也属模块
5、UBT根据起始目录构建  Editor Runtime Developer ThirdParty
6、未使用的模块不会编译
7、模块内的类会加上 模块名_API 这个宏,在生成VS项目,编译时都会用到,如果没加编译时会忽略文件。

运行
以 UE引擎下 Binaries\Win64 为运行目录
分2进程:进程一、UE源 启动编辑器创建页,进程二、编辑器创建页  创建新的项目,项目使用UE源。

插件
注意 .uplugin配置  Modules下的Type 如果是Develop 在打包运行时不会加载

其他
在C++类使用了插件模块的时候Build.cs要引入插件模块名
要拷贝dll文件到Binaries\Win64下  在使用插件提示dll找不到 要拷贝 opencv-ue4editor.dll 之类的

UE4 编译笔记的更多相关文章

  1. LFS7.4编译笔记(3)

    在第一部分,我们编译了一个工具链及临时系统,然后在第二部分我们chroot到/mnt/lfs下面,利用临时系统的工具编译了我们最终的LFS系统.不过此时,我们的LFS系统还是不完整的,因为我们还没有安 ...

  2. MRuby 编译笔记

    专注于嵌入式脚本的MRuby在Windows下的编译笔记: 环境: OS: Windows 8.1, 使用 VS Express 2013 for Desktop. 材料: MRuby : 下载源码就 ...

  3. 支持源码单步调试QT库编译笔记

    支持源码单步调试QT库编译笔记 编译环境:windows 10 编译工具:mingw_4_4_0 Qt源码版本:qt-everywhere-opensource-src-4.8.5(下载地址:http ...

  4. INSIDE COM 最后一章例子 TANGRAM 编译笔记

    VS2013项目下载地址: http://pan.baidu.com/s/1gemrBrl 注册并运行: 使用管理员权限. 运行 REGISTER.BAT. 然后运行 TANGRAM.EXE 即可. ...

  5. LFS7.4编译笔记(1)

    由于第一次编译,花了不少时间,也不知道能不能成功,所以就没有记笔记,现在重新编译一次,这次不装U盘而是装到我的移动硬盘上面.步骤差不多,因为我感觉硬盘的速度会比U盘快. 至于LFS的优点,我就不多说了 ...

  6. JAVA代码反编译笔记

    最近有个朋友说有个java弄的软件是从朋友处拿来的,由于进行了网卡地址绑定,不修改网卡地址无法使用,叫我看看有无办法破解,之前都很少玩这些东西,本着帮忙的心态,尝试了下,便有了一下的笔记内容. 1.使 ...

  7. java动态编译笔记

    1 前言 Java的动态编译知识,真真在实际开发中并不是经常遇到.但是学习java动态编译有助于我们从更深一层次去了解java.对掌握jdk的动态代理模式,这样我们在学习其他一些开源框架的时候就能够知 ...

  8. apk反编译、smali修改、回编译笔记

    最近下了一个apk程序,但是一启动会弹出一个流氓广告.这个广告不是原厂商加的,而是有人在原有apk程序的基础上,加了一个壳,让apk先启动他加的广告,再启动原来的程序,很恶心.于是想去掉它. 试了几个 ...

  9. LFS7.4编译笔记(2)

    上一篇我们已经搭建好了临时系统,这一篇我们就开始正式构建我们的最终LFS系统. 首先切换到root,准备虚拟内核文件系统并挂载: su - export LFS=/mnt/lfs mkdir -pv ...

随机推荐

  1. 阻止 form 回车 自动提交

    问题:当form表单中只有一个input时,在input中按回车键会自动提交. 解决方案: 1.form元素上加onsubmit="return false"(推荐) 2.多个in ...

  2. jquery 追加元素/jquery文档处理,插入、修改、移动、删除指定的DOM元素.

    jquery 追加元素 $("#content").append("..."); // 添加到元素内部最后面 $("#content").p ...

  3. 利用nginx进行集群部署

    现在一般的服务器都是集群的情况了,所以准备搞集群部署下. nginx用的是第三方的openrestynginx.首先安装nginx,我的系统是UBuntu,安装方法也很简单,见官网. 自己采用了默认安 ...

  4. react-native中的setNativeProps

    如果你通过React.createClass方法自定义了一个组件,直接给它设置样式 prop 是不会生效的,你得把样式 props 层层向下传递给子组件 ,直到子组件是一个能够直接定义样式的原生组件. ...

  5. bash 5

    1)bash支持一维数组(不支持多维数组),并且没有限定数组的大小. 类似于 C 语言,数组元素的下标由 0 开始编号.获取数组中的元素要 利用下标,下标可以是整数或算术表达式,其值应大于或等于 0. ...

  6. (贪心 区间) 51nod1091 线段的重叠

    X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]. 给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长 ...

  7. python中执行shell命令的几个方法小结

    原文 http://www.jb51.net/article/55327.htm 最近有个需求就是页面上执行shell命令,第一想到的就是os.system, os.system('cat /proc ...

  8. MySql笔记二:命令简介

    从笔记二开始讲解一些简单的命令,这些我在SQL Server里面都讲过了,什么主键,约束啥的数据库这些都是相通的,所以MySql这里,不讲,粗略过一遍. 使用命令框登录MySql mysql -u r ...

  9. jsp页面的共用

    我们经常希望一个网页,根据不同得请求显示不同得数据. 方法就是在session中添加一个变量,根据不同得值区分不同得请求类型. 后台:request.getSession().setAttribute ...

  10. JMETER压力测试报错:JAVA.NET.BINDEXCEPTION: ADDRESS ALREADY IN USE: CONNECT

    最近在实现接口压力测试的时候遇到这样的一个问题 当线程数持续上升到一个点的时候,运行脚本的时候有很多报错,如图: java.net.BindException: Address already in ...