`
aigo
  • 浏览: 2674627 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

[UE4]Project.Build.cs配置示例(UE4引用libuv静态链接库)

UE4 
阅读更多

这个例子演示了如何链接libuv静态库相关的配置。

libuv版本是v1.8

// Fill out your copyright notice in the Description page of Project Settings.

using System.IO;
using UnrealBuildTool;

public class HuaiKXSrv : ModuleRules
{
    private string ModulePath
    {
        get { return Path.GetDirectoryName(RulesCompiler.GetModuleFilename(this.GetType().Name)); }
    }

    private string ThirdPartyPath
    {
        get { return Path.GetFullPath(Path.Combine(ModulePath, "../../ThirdParty/")); }
    }


    public HuaiKXSrv(TargetInfo Target)
	{
		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });

		PrivateDependencyModuleNames.AddRange(new string[] {  });

        // Uncomment if you are using Slate UI
        // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });

        // Uncomment if you are using online features
        // PrivateDependencyModuleNames.Add("OnlineSubsystem");
        // if ((Target.Platform == UnrealTargetPlatform.Win32) || (Target.Platform == UnrealTargetPlatform.Win64))
        // {
        //		if (UEBuildConfiguration.bCompileSteamOSS == true)
        //		{
        //			DynamicallyLoadedModuleNames.Add("OnlineSubsystemSteam");
        //		}
        // }

        AddDefines(Target);

        LoadLibuv(Target);
    }

    public void AddDefines(TargetInfo Target)
    {
        if ((Target.Platform == UnrealTargetPlatform.Win32) || (Target.Platform == UnrealTargetPlatform.Win64))
        {
            Definitions.Add("_IS_WINDOWS_");
        }
        else
        {
            Definitions.Add("_IS_LINUX_");
        }
    }

    //链接libuv
    public bool LoadLibuv(TargetInfo Target)
    {
        bool isLibrarySupported = false;

        //libuv需要的系统lib
        PublicAdditionalLibraries.Add("IPHLPAPI.lib");
        PublicAdditionalLibraries.Add("Psapi.lib");
        PublicAdditionalLibraries.Add("userenv.lib");
        PublicAdditionalLibraries.Add("msvcrtd.lib");

        if (Target.Configuration == UnrealTargetConfiguration.Debug || Target.Configuration == UnrealTargetConfiguration.DebugGame)
        {
            if ((Target.Platform == UnrealTargetPlatform.Win64) || (Target.Platform == UnrealTargetPlatform.Win32))
            {
                isLibrarySupported = true;

                string PlatformString = (Target.Platform == UnrealTargetPlatform.Win64) ? "D.x64" : "D.x86";
                string LibrariesPath = Path.Combine(ThirdPartyPath, "Libuv", "Libraries");

                string LibuvLibPath = Path.Combine(LibrariesPath, "libuv" + PlatformString + ".lib");
                PublicAdditionalLibraries.Add(LibuvLibPath);
                System.Console.WriteLine("#### Set Debug Libuv Libraries ####:" + LibuvLibPath);
            }
        }
        else if (Target.Configuration == UnrealTargetConfiguration.Shipping || Target.Configuration == UnrealTargetConfiguration.Development)
        {
            if ((Target.Platform == UnrealTargetPlatform.Win64) || (Target.Platform == UnrealTargetPlatform.Win32))
            {
                isLibrarySupported = true;

                string PlatformString = (Target.Platform == UnrealTargetPlatform.Win64) ? "x64" : "x86";
                string LibrariesPath = Path.Combine(ThirdPartyPath, "Libuv", "Libraries");

                string LibuvLibPath = Path.Combine(LibrariesPath, "libuv." + PlatformString + ".lib");
                PublicAdditionalLibraries.Add(LibuvLibPath);
                System.Console.WriteLine("#### Set Shipping Libuv Libraries ####:" + LibuvLibPath);
            }
        }

        if (isLibrarySupported)
        {
            System.Console.WriteLine("#### Set Libuv Includes ####:" + Path.Combine(ThirdPartyPath, "Libuv", "Includes"));
            // Include path
            PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "Libuv", "Includes"));
        }

        //Definitions.Add(string.Format("WITH_BOBS_MAGIC_BINDING={0}", isLibrarySupported ? 1 : 0));

        return isLibrarySupported;
    }
}

 

 

 

 

 

分享到:
评论

相关推荐

    libuv静态库

    在iOS项目中集成libuv.a静态库,需要将其添加到Xcode工程中,并通过Link Binary With Libraries步骤将库链接到目标应用。同时,需要确保所有相关的头文件(通常是包含libuv API定义的.h文件)被正确引用,以便在代码...

    libuv 1.22.0动态链接库libuv.dll

    **libuv 1.22.0动态链接库libuv.dll详解** libuv是一个跨平台的异步I/O库,最初由Node.js项目开发并维护,现在已成为一个独立的开源库,广泛应用于需要高性能网络编程的场景。1.22.0是libuv在2018年7月发布的版本,...

    VS2019编译好的libuv-v1.33.1库

    5. **使用编译好的库**:在自己的项目中,通过链接 `libuv.lib` 并包含必要的头文件(如 `uv.h`),即可使用 Libuv 提供的功能。 使用预编译的库文件 `libuv.lib` 可以节省开发者的时间,因为无需自行编译 Libuv。...

    VS2019-LibUV1.34.0动态链接库工程(有源码)

    5. **使用库**:在自己的工程中,将编译好的 `libuv.lib` 链接到项目的链接器输入,同时将 `include` 文件夹中的头文件添加到包含目录。 6. **运行测试**:项目中通常会包含测试用例,编译并运行这些测试以验证库的...

    libuv在centos下的编译安装.pdf

    运行编译命令 gcc -o test test.c /usr/local/lib/libuv.so 将源代码编译成test可执行文件,需要注意的是链接了libuv.so库。之后执行test时,如果遇到“error while loading shared libraries: libuv.so.1: cannot ...

    libuv源代码移植到CLion工程

    在项目根目录下创建或编辑`CMakeLists.txt`文件,配置libuv的编译和链接。通常,这会包括添加`add_subdirectory(src)`,指定源代码目录,并设置必要的库和目标。 ```cmake cmake_minimum_required(VERSION 3.10) ...

    libuv_tcp的基于libuv库的c++实现.zip

    《基于libuv库的C++实现TCP通信详解》 在计算机网络编程中,TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。本项目着重探讨了如何利用libuv库在C++环境中实现TCP...

    libuv-1.37.0.zip

    libuv is a multi-platform support library with a focus on asynchronous I/O. It was primarily developed for use by [Node.js][], but it's also used by [Luvit](http://luvit.io/), [Julia]...

    libuv源码libuv-1.x

    libuv 是一个跨平台的异步 I/O 库,主要用于处理网络和操作系统交互,它是 Node.js 的核心库之一,为 Node.js 提供了非阻塞的 I/O 操作。libuv-1.x 版本包含了该库的最新特性和改进,提供了丰富的功能来支持多平台的...

    libuv documentation.pdf

    libuv 的文档提供了详细的设计概述、安装指南、API 文档和示例代码等。 libuv 的特点可以总结为: * 跨平台支持,支持多种操作系统和架构。 * 全功能的事件循环,支持多种 I/O polling 机制。 * 异步 TCP 和 UDP ...

    跨平台网络库libuv最新源代码

    跨平台网络库libuv最新源代码跨平台网络库libuv最新源代码跨平台网络库libuv最新源代码跨平台网络库libuv最新源代码跨平台网络库libuv最新源代码跨平台网络库libuv最新源代码跨平台网络库libuv最新源代码跨平台网络...

    libuv中文教程.pdf

    libuv是一个基于C语言编写的高性能、事件驱动的I/O库,它提供了跨平台的API,支持如Windows、Linux等操作系统。libuv在设计上强调了事件驱动编程范式,其核心是提供一个event-loop(事件循环),以及基于I/O和其他...

    编译好的libuv

    6. **动态链接库libuv.dll**:在Windows平台上,libuv库通常以动态链接库(DLL)的形式存在,这样可以减少应用程序的体积,同时允许动态更新库。 7. **引入库lib和头文件**:除了libuv.dll之外,压缩包还包含了库...

    libuv封装,封装libuv网络库

    1. **头文件和库的链接**:在 C/C++ 项目中,需要正确地包含 Libuv 的头文件并链接其库。确保在编译时指定正确的路径,以找到库文件和头文件。 2. **定义数据结构**:封装 Libuv 需要创建与 Libuv 内部结构相对应的...

    libuv-v1.9.0.tar.gz

    《深入理解libuv-v1.9.0:构建高性能跨平台异步I/O库》 libuv是一个开源的、跨平台的库,主要用于处理异步I/O操作,它被广泛应用于Node.js中作为其核心的事件循环机制。libuv-v1.9.0是该库的一个稳定版本,为开发者...

    libuv-1.41.0-dll+lib-win32编译可用.zip

    在Visual Studio 2017中使用libuv,开发者需要将提供的lib文件(.lib)添加到项目的链接器输入依赖项,同时确保运行时库设置与libuv的配置一致。动态链接库(dll)则需在运行时拷贝到可执行文件的同一目录或系统PATH...

    libuv-master.tar.gz

    **标题解析:** "libuv-master.tar.gz" 这个标题表明我们正在处理的是一个名为“libuv-master”的源代码库的归档文件,采用的是常见的tarball格式(.tar.gz)。这种格式是Linux和Unix系统中常用的压缩方式,它先使用...

    libuv1.9加gyp3.3

    【libuv1.9加gyp3.3】是一个针对2016年时的最新版本的libuv库,结合了gyp工具的打包。libuv是一个跨平台的异步I/O库,广泛用于Node.js作为其核心的一部分,提供非阻塞的网络I/O操作,如TCP和UDP套接字、管道、信号...

    An Introduction to libuv.pdf

    《An Introduction to libuv.pdf》是一份关于libuv的入门教程文档,旨在为读者提供一个高性能事件驱动I/O库的基础使用指南。该文档由Nikhil Marathe撰写,并在2015年12月首次发布,后续版本可能有所更新。libuv提供...

    libuv book 中文文档 An introduction to libuv

    《libuv书中文文档:An introduction to libuv》是关于libuv库的一个详细介绍。libuv是一个跨平台的异步I/O库,主要用于构建高性能的网络和文件系统应用程序。这本书的中文版提供了对libuv的入门指南,帮助开发者...

Global site tag (gtag.js) - Google Analytics