I have an internal game plugin library that contains code as well as blueprint assets. With perforce I’m able to insert this plugin (through a single perforce folder) into a bunch of different projects. The problem is that when I make changes to the code and blueprints, I will need to update the binaries and distribute them (again through a single perforce folder) along with my blueprints to my artists and designers. When I build the plugin (for both editor and package building) while in any specific project (for example, my Showroom project), I get the following list of files to provide to my artists/designers…
Showroom-NurulizeComponents-Static.lib
UE4Editor-NurulizeComponents.dll
UE4Editor-NurulizeComponents.pdb
The issue is the Showroom-NurulizeComponents-Static.lib. Because of the Showroom prefix, other projects won’t be able to find the static library. Additionally, I don’t want to have to build (and distribute) the project named static library for every project that we have.
Is there a way to make the lib name generic so it can be used across a multitude of projects? How are 3rd party libraries doing this? Is there an option to make a generic named library or dll within the Unreal Build System?
ShouldUseSharedBuildEnvironment (Distributing plugin without source - Plugins - Epic Developer Community Forums) appears to be what I was looking for in this specific issue. My initial tests indicate that ShouldUseSharedBuildEnvironment does create non-project specific named libraries. But I’ve not had time to fully test out the ability to swap those libraries among projects.
Guys, if anyone is looking for at this post UE 4.16, there has been a change. According to the changelog in UE 4.20 source code:
**The TargetRules.ShouldUseSharedBuildEnvironment() function has been deprecated. Targets can now specify the build environment they wish to use by setting BuildEnvironment to TargetBuildEnvironment.Default/Shared/Unique in their constructor instead. **
I’ve manage to succeed with this line in my .Target.cs file right after:
Type = TargetType.Game;
BuildEnvironment = TargetBuildEnvironment.Shared;
Good luck because this is severely under-documented everywhere.