Language:
Page Info
Engine Version:
Share

自动项目文件生成

先决条件页面

在阅读本页面前应对以下页面有所了解,如尚不了解,则请先浏览以下页面。

以下指南适用于从GitHub上下载并从源代码构建了UE4的用户。

如果您下载的是最新版虚幻引擎4(UE4)代码,可能会注意到其中不包含用于编译和运行引擎或示例游戏的Visual Studio(VS)或Xcode项目文件。您需要运行一个脚本来生成可供加载的项目文件:

  • 运行UE4主目录中的GenerateProjectFiles.bat文件

    您可以从任意文件夹运行该脚本。(如果需要,也可以创建桌面快捷方式。)

  • 项目生成工具将分析模块和目标构建文件,并生成新项目文件。这个过程最多需要15秒左右。

对于VS开发者,这样会在同一个目录中生成UE4.sln文件。您将使用该解决方案文件构建和运行UE4游戏和程序。(如果是首次编译,我们建议在Win64平台中使用“开发(Development)”配置)

默认情况下,我们会为检测到相应SDK的所有可用平台生成可构建项目,这样您也能够构建和调试控制台和移动平台。如果您只想为运行的当前平台(如Windows)生成项目,请使用-CurrentPlatform参数运行GenerateProjectFiles.bat。这样项目文件会稍微小一些。

要点:在从源代码控制同步新代码更改后,务必重新运行GenerateProjectFiles.bat。如果忘记这步操作,很可能会在编译或运行游戏时遇到问题。

如果您对模块进行了本地更改,如添加或移除源文件,应再次运行GenerateProjectFiles.bat。我们建议不要对项目文件进行手动更改。

与UnrealVS扩展集成

适用于VS的UnrealVS扩展 包含一个工具栏按钮,单击后可以为当前加载的解决方案重新生成项目文件。

您还可以为该功能绑定一个快捷键。在VS中,打开“工具(Tools)->选项(Options)->环境(Environment)->键盘(Keyboard)”,然后搜索UnrealVS.RefreshProjects。

请注意,该功能仅在您加载了解决方案后才会启用(因为该工具需要知道要为哪个代码分支生成项目。)如果您尚未生成UE4.sln文件,需要先运行GenerateProjectFiles.bat脚本。

命令行选项(高级)

项目生成工具包含一些可选的命令行参数,如果想要自定义生成的项目文件来更好地满足需要,可以使用这些参数。通常,这些选项不是必须使用或建议使用的。

选项

说明

-CurrentPlatform

仅为当前桌面平台(Windows或Mac)生成可构建项目,而不是为所有检测到的目标平台。

-2015

以VS 2015原生格式生成项目。设置该选项后,将使用Visual C++ 2015编译器进行编译。

-2017

以VS 2017原生格式生成项目。设置该选项后,将使用Visual C++ 2017编译器进行编译。

-ThirdParty

将来自第三方库的标头和其他文件添加到项目中。例如,如果您想要在Visual Assist中看到PhysX、Steamworks或Bink的符号和文件,该选项很有用。但是,这样会使项目文件加载时间延长!

-Game GameName

告诉项目生成工具生成仅包含指定项目名称的代码和内容的项目,不包括所有其他发现的项目。确保同时指定项目名称。例如,GenerateProjectFiles.bat ShooterGame.uproject -Game将生成仅包含ShooterGame的源代码和目标的项目。如果您想要在一个游戏项目中包含引擎源代码和程序,还可以传递-Engine参数。

-Engine

-Game结合使用时,会在生成的解决方案中包含引擎代码、内容和程序。如果您认为在处理游戏项目时要经常使用引擎源代码,该选项很有用。

-NoIntelliSense

跳过生成IntelliSense数据,这些是IDE中的自动完成和错误曲线数据。

-AllLanguages

包含所有语言的引擎文档。默认情况下,我们在项目中仅包含英语文件。

-OnlyPublic

指定后,生成的项目中仅包含引擎模块的公共标头文件。默认情况下,将包含引擎模块的所有源文件。这样可以加快项目加载,但可能更难浏览引擎代码。

-NoShippingConfigs

在生成的项目中省略交付(Shipping)测试(Test)构建配置。这会减少需要处理的目标配置数量。

-Platforms=PlatformName

覆盖要为其生成可构建项目的默认平台集,为您指定的平台生成项目。您可以用“+”字符分隔来指定多个平台。这样也会使生成的解决方案文件名带有一个包含平台名称的后缀。

常见问题及解答

为什么我还没有更新项目文件,但新添加的源文件也会编译?

UE4构建系统实际上不会要求项目文件编译代码。Unreal Build Tool总是会查找使用模块和目标构建文件的源文件。因此,如果您添加了新的源文件并触发编译,则即使项目还没有刷新,也会在构建中包含这个新的源文件。只需记住这一点即可。

实际项目保存在哪里?

对于VS项目,生成的解决方案文件是UE4.sln,保存在UE4根目录中。但是项目文件保存在/UE4/Engine/Intermediate/ProjectFiles/目录中。您可以随时删除这些文件并重新生成项目,但是,删除这些文件可能会失去一些特定于项目的偏好设置,例如命令行参数。

生成项目文件的优势是什么?

一定是有利有弊,但我们决定为UE4生成项目文件有一些重要的原因:

  • UE4是为了配合许多平台而设计的,但不同的团队有时可能仅使用少数特定平台。通过生成项目文件,我们可以省去不相关的特定于平台的文件和构建配置。

  • UE4编程方法融入了许多子模块,而且非常重要的是我们尽量减轻程序员添加新模块的操作。

  • 项目生成工具会发出高度精准的定义,包括您在UE4代码中工作时由VS IntelliSense使用的路径。

  • 能够自动生成项目文件,明显简化了设置新项目的过程。

  • 我们还希望能够支持多个平台和开发环境(例如VS和Xcode)。人工维护多个项目文件集容易出错,而且任务繁重。

  • 我们希望让程序员能够高度定制项目文件。我们也期待这一点会变得越来越重要。

  • 源文件的目录结构会自动镜像到项目文件解决方案层级中。这样在浏览源文件时非常方便,但过去对于人工编写的项目而言却非常困难。

  • UE4构建配置非常复杂,难以人工维护。项目生成工具让这个过程对于开发者而言几乎是透明的。

所有其他文件在项目中有怎样的作用?

除了C++模块的源代码之外,我们还自动在生成的项目中添加了一些其他文件。这只是为了在搜索时便于找到这些文件。下面是添加到所生成项目的一些其他文件示例:

  • 着色器源代码(*.usf文件)

  • 引擎文档文件(*.udn文件)

  • 程序配置文件(*.ini文件)

  • 本地化文件(*.int文件)

  • 程序资源文件和清单(*.rc、.manifest)

  • 特定外部(非生成)项目文件(如UnrealBuildTool、Clean)

为什么源代码控制中没有检入项目文件?

将源代码控制冲突合并到项目文件非常繁重,极易出错。新系统为了完全避免这一点,将项目文件视为纯中间文件。此外,对于处理不同游戏项目的每个团队而言,解决方案文件都有所不同。因此,可能存在Epic使用的项目文件不加修改则可能对其他团队没有用处的情况。

GenerateProjectFiles.bat的实际作用是什么?

该脚本只是Unreal Build Tool的一个简单的包装器,以特殊模式启动,用于构建项目文件,而不是构建程序可执行文件。它使用-ProjectFiles命令行选项调用Unreal Build Tool。

我正在更改项目生成工具代码。我该如何调试?

  • 将启动项目更改为UnrealBuildTool。

  • 将用于调试的命令行参数设为:-ProjectFiles

  • 将工作目录设为以下本地路径:[您的UE4目录]/Engine/Source/

  • 正常编译和调试。

请注意,在您工作时,项目生成工具可能会重写您在VS中使用的项目文件。因此,将UnrealBuildTool项目直接加载到VS中有时会很有用,而不是通过常规的UE4解决方案文件进行调试。

如何同时构建多个配置?

您可以使用VS中的“批量构建(Batch Build)”功能。您可以在“构建(Build)”菜单中找到此功能。只需选择想要编译的所有配置,然后单击“构建(Build)”即可。我们正在寻找方法,希望在未来让这个界面变得更易于使用。