zoukankan      html  css  js  c++  java
  • 使用CoApp创建NuGet C++静态库包

    NuGet是微软开发平台下的包管理软件,使用它你可以非常方便的将一些第三方的库、框架整合进自己的项目中,省去了不少麻烦的配置过程。但是从官方文档上来看,貌似NuGet对C++的支持不是很好,并且在现阶段推荐使用CoApp来简化包的构建。

    1. 环境要求

    • NuGet 2.5 及以上(较新版本才加入了对C++包的支持)
    • Windows Vista及以上,PowerShell 3.0(CoApp使用PS来构建C++本地包)
    • CoApp(简化包的构建过程,安装详见官网)

    2. 准备材料

    • 静态库及相应发布的头文件
    • 静态库符号数据库(即PDB文件)
    • 文档(可选)

    3. 编写AutoPackage脚本

    这个脚本是用来指导CoApp构建我们的静态库包的,一般使用.autopkg作为其扩展名。 该文件由多个节点(Node)组成,节点的写法相当于C++中的命名空间。

    3.1 nuget节点

    这是脚本的父节点,它包含所有用来生成NuGet包的子节点。

    nuget{
    
    }
    

    3.2 nuspec子节点

    该节点包含要创建包的元数据,我们在这里指定将要生成的包的描述信息,这些信息会被显示在NuGet官网中的包页面下。常用的主要有:

    1. ID
    2. 版本(version)
    3. 标题(title)
    4. 作者(authors)
    5. 所有者(owners)
    6. 许可文件地址(licenseUrl)
    7. 项目地址(projectUrl)
    8. 图标地址(iconUrl)
    9. 概要(summary)
    10. 描述(description)
    11. 标签(tags)

    这个节点是nuget的子节点,元数据的具体写法如下(注意每一项元数据后面都要跟一个分号;):

    nuspec
    {
        id = EasyXPlus;
        version : 1.0.1;
        title: EasyXPlus;
        authors: lgxZJ@outlook.com;
        projectUrl: "https://github.com/lgxZJ/EasyXPlus";
        summary:A simple C++ graphic library for BEGINNERS under windows!;
    
        description: "A simple C++ graphic library for BEGINNERS under windows!";
        tags: { beta, native, c++ };
    }
    

    3.3 files子节点

    files节点也是nuget的子节点,用来指定生成包所需要的文件。对于C++静态库来说,我们只需要在files节点中指定三种文件:

    1.头文件include : { "headers*" }; 我们指定相对目录headers下的所有文件为发布的头文件。

    2.文档(可选):docs : { "dochtml* }; 我们指定相对目录dochtml下的所有文件为文档。

    3.库文件、PDB文件:对于这些文件我们需要指定目标平台、VS版本和开发模式:

    [x86, v140, debug] {
    	lib:        buildsvs2015libeasyDebuglibeasyd.lib;
        symbols:    buildsvs2015libeasyDebuglibeasy.pdb;
    }
    [x64, v140, release] {
    	...
    }
    

    这个数据项格式不同于其他简单的项,不需要在末尾跟分号;

    下面是一些VS版本号与对应工具集:

    • VS2015 ---- v140
    • VS2013 ---- v120
    • VS2012 ---- v110
    • VS2010 ---- v100

    3.4 targets子节点

    我们没有用到这个节点,因此简单的在Defines定义中加上一个值:

    targets
    {
        Defines += HAS_EASYXPLUS;
    }
    

    至此,我们的脚本就编写结束了,完整的文件见链接

    4. VS2015发布支持

    但是CoApp还没有正式的版本支持VS2015,因此我们采用了github上一个workaround,这个节点需要写在nuget节点之前

    configurations {
    	Toolset { 
        	key : "PlatformToolset"; 
        	choices: { v140 };  
        	// Explicitly Not including pivot variants:  "WindowsKernelModeDriver8.0", "WindowsApplicationForDrivers8.0", "WindowsUserModeDriver8.0" 
    
        	// We're normalizing out the concept of the v140 platform -- Overloading the $(PlatformToolset) variable for additional pivots was a dumb idea.
        	v140.condition = "( $(PlatformToolset.ToLower().IndexOf('v140')) > -1 Or '$(PlatformToolset.ToLower())' == 'windowskernelmodedriver8.0' Or '$(PlatformToolset.ToLower())' == 'windowsapplicationfordrivers8.0' Or '$(PlatformToolset.ToLower())' == 'windowsusermodedriver8.0' )";
    	};
    }
    

    5. 创建C++静态库包

    在PowerShell下运行以下命令构建本地包,本地包默认在脚本所在目录下生成:

    Write-NuGetPackage .EasyXPlus.autopkg
    

    如果运行时PowerShell提示无法加载模块或者无法加载文件,可以试着执行set-executionpolicy remotesigned

  • 相关阅读:
    积少成多Flash(8) ActionScript 3.0 网页之获取参数,JavaScript与ActionScript之间的相互调用
    积少成多Flash(11) Flex 3.0 动画效果(effect)
    积少成多Flash(9) Flex 3.0 布局控件, 样式(css), 皮肤(skin)
    系出名门Android(8) 控件(View)之TextSwitcher, Gallery, ImageSwitcher, GridView, ListView, ExpandableList
    系出名门Android(9) 数据库支持(SQLite), 内容提供器(ContentProvider)
    积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引
    系出名门Android(5) 控件(View)之TextView, Button, ImageButton, ImageView, CheckBox, RadioButton, AnalogClock, DigitalClock
    系出名门Android(1) 在 Windows 下搭建 Android 开发环境,以及 Hello World 程序
    小程序webview组件 nothing
    Python3的bytes/str之别
  • 原文地址:https://www.cnblogs.com/lgxZJ/p/7077174.html
Copyright © 2011-2022 走看看