Post

A way to combine multiple unreal projects into one

A way to combine multiple unreal projects into one

Use the GenerateProjectFiles.bat and .uprojectdirs files of the engine directory

  • First refer to the comments in the Default.uprojectdirs file
  • Create a new my.uprojectdirs or directly modify the Default.uprojectdirs file and write to e.g. Project/
  • When you run GenerateProjectFiles.bat build a solution, you will additionally look for Unreal Project directories from the Level 1 subdirectory of the Engine Directory/Project directory, such as UnrealEngine/Project/LyraGame finish

Because only subdirectories can be specified in the .uprojectdirs file, if you want projects in external directories to be included in the solution file, you can use the symbol-link functionality provided by the system

Deprecated

Original intention

For working and studying purpose, I have multiple Unreal Projects on my computer, and they share the same engine

By default, each project file is a stand-alone solution file generated by UBT(Unreal Build Tool)

This brings me some problems:

  • Due to the high cost of opening a solution, the waiting time and memory footprint may get multiplied when opening multiple solutions at the same time

  • When the IDE is bugged, or the engine code is updated and triggering “symbol reparsing”, It takes at least 15 minutes to boot up, which is really a torture

I think that different project solutions should treat the project with same physical path as the same project, the Unreal Engine project file should not be re-parsed in each solution

But both of the Rider and Visual Studio (the most powerful IDE of the universe;) will get it re-parsed in every solution. It is very tortuous and makes me confused, hoping some expert could explain the reason behind this

Demand

So I was thinking: since these IDEs are “stupid” and unreliable, could I find a way to manually combine multiple solutions into one?

Steps

I am sharing the steps to accomplish the job using Rider:

  1. Among the solutions that you want to open together, choose the one you like as the main solution, open it up

  2. Add other project files

  • In Explorer, the solution browser, right-click any project folder, such asGames, select Add, Add Existing Project..., and choose the relative project file

  • Assuming we are adding the LyraStarterGame project, then these files should locate at LyraStarterGame_Folder\\Intermediate\\ProjectFiles\\LyraStarterGame.vcxproj

  1. In “Solution Configuration”, modify the configuration of the project just added
  • in the toolbar of the upper right corner, click DebugGameEditor | Win64 button (this is my Solution Configuration, the text of the button would be different according to your configuration), and select Edit Solution Configurations...

  • find the project just added, you should notice that they are default configured as something like DebugClient | Arm64, change it to what you need, generally it should be the same as Solution Configuration

  1. Modify the project file parameter
  • back to Explorer, the solution browser

  • right-click the project just added (again, using LyraStarterGame as an example), select Edit, Edit LyraStarterGame.vcxproj

  • replace all the $(SolutionDir) with $(ProjectDir)..\\..\\ in LyraStarterGame.vcxproj ($(SolutionDir) is the root path of current solution, $(ProjectDir) is the root path of current project file, which is LyraStarterGame_Folder\\Intermediate\\ProjectFiles\\, using ..\\ twice, we get the root path of current project)

  • if you don’t want to replace all of them at once, searching your “build configuration” such as DebugGame_Editor|x64, find the relevant configuration, you can only replace the text within the three NMake command lines, but probably encounter some problems because of can not parse the project file correctly: for example Switch Header/Source is not working, grammar coloring is broken. If so, do a full replacement should solve the problem

Limitation

Every time the project file is regenerated, the relative file would be overriden and the steps above need to be re-done. If any IDE could support this or having a tool to automated this, life would be much easier

This post is licensed under CC BY 4.0 by the author.