#473 正确引用第三方module   module     UE4     2 years ago (owner) Document
假设已有一个第三方module,要在你自己的module中使用它。
第三方module命名为M3,自己的module命名为M1. 即M1中要使用M3.
正确的引用方法是在M1的M1.build.cs文件中设定如下字段:
 PublicDependencyModuleNames或PrivateDependencyModuleNames中添加M3,如果引用M3中功能的代码是在M1的Public源码中,则加到PublicDependency里,反之,如果是在M1的Private源码中引用M3中的功能,则加到PrivateDependency里。如果在M1的Public和Private源码中均引用了M3中的功能,则应该把M3同时添加到PublicDependency和PrivateDependency中。
上面对DependencyModule的设置对应toolchain里的静态链接,即保证M1对M3中的对象或功能的引用能找到实现。但是它不完全解决头文件包含层面的问题。不完全的意思是有时候不用处理头文件包含的事情也没问题发生,有时候不处理头文件包含的事情就有问题发生。不用处理也没有问题发生的情形是:M3中的功能实现,其对应的头文件都加到了M3的PublicIncludePaths中,那么M1中引用M3的该功能时,不用额外处理头文件包含事宜。相应的,有问题的情形是:M3中实现了某个功能,但其相关头文件没有加入到M3的PublicIncludePaths中。此时M1的某个cpp中调用M3里的一个函数时,编译器会报告找不到函数声明。这种有问题的情况,可以通过将M3中相应的路径加到M1的PublicIncludePaths或PrivateIncludePaths中来解决
 假设M3的某项功能实现在M3/Private中。当在M1的Public源码中使用M3的这项功能时,可将M3/Private添加到M1的PublicIncludePaths中。当在M1的Private源码中使用M3的这项功能时,可将M3/Private添加到M1的PrivateIncludePaths中。同时,在cpp中需用#include "M3/Private/xxx.h"来引用头文件。
 PrivateIncludePaths.AddRange(
			new string[] {
				// ... add other private include paths required here ...
				System.IO.Path.Combine(GetModuleDirectory("LevelEditor"), "Private"),
			}
			);
还有一种需求:引用第三方module里的C++模板定义或抽象接口等,一般就是一些类模板和函数模板的C++头文件。这些头文件由于只包括模板或抽象接口,所以是功能完备且独立的,此种需求下,我们只需要访问这些模板或抽象接口,不需要除此之外的整个第三方module,那就可以设置PrivateIncludePathModuleNamesPublicIncludePathModuleNames这两个属性。这两个属性给予对第三方module里某些路径的代码访问权限,同时不会将第三方module的dll或lib链接到最终的exe中。
 
  • → + #44 module的build.cs文件里的bPrecompile要设置为true ...   5 years ago (owner) Document
  • → + #511 module.build.cs文件常见字段   Package   ...   3 months ago (owner) Document