创建c++的nuget库
准备coApp
通过coApp可以快速的创建c++的nuget包,首先下载coApp(http://coapp.org/pages/releases.html)
安装后最好重启以确保环境变量生效
编译
将需要打包的库使用vs编译器编译成二进制文件,将头文件、lib文件、dll文件(动态库)分别存好,注意如果要想nuget包支持多种平台(x64、x86)、多种编译器*(v120、v140)要用指定的选项分别编译。
打包脚本
打包脚本是一个.autopkg文件
示例如下:
@import @"version.inc";
nuget {
nuspec {
id = sample;
version : ${package-version};
title: sample;
authors: cvter};
owners: {CoApp Project, cvter};
licenseUrl: "http://sample/sample-LICENSE.txt";
projectUrl: "http://x.gz.cvte.cn/sample";
iconUrl: "http://sample.org/sample.jpg";
requireLicenseAcceptance:false;
summary: @"this is a sample for cvte native nuget.
Homepage: http://www.sample.org";
releaseNotes: "Release of sample 0.0.1 libraries.";
copyright: Copyright 2016;
tags: { sample, native, CoApp };
};
files {
include: {
..\sample\sample.h,
};
docs: { ..\readme.txt };
source += {
..\sample\*.cpp,
..\sample\*.h,
..\sample\include\*.h,
};
[Win32,v120,dynamic,release] {
lib: { ..\Release\sample.lib };
bin: { ..\Release\sample.dll };
symbols: { ..\Release\sample.pdb };
}
[Win32,v120,dynamic,debug] {
lib: { ..\Debug\sample_d.lib };
bin: { ..\Debug\sample_d.dll };
symbols: { ..\Debug\sample_d.pdb };
}
};
/*
dependencies {
packages : {
sample2/0.0.2
};
}
*/
}
示例脚本基本囊括了常用的选项,只需要在此基础上稍作改动即可。
版本
同目录下的version.inc
文件存放了版本信息,文件内容只有如下一行:
#define { package-version: 0.0.1; }
nuspec
nuspec
节中说明了nuget包的基本信息,做相应的修改即可。注意id
是唯一标识,不能和其他的包重复。
tags
中的native是约定俗成的c++库的标志。
files
include
节指定头文件
docs
节指定文档文件
source
节指定源文件
lib
节指定lib文件
bin
节指定dll文件
symbols
节指定pdb调试文件
其中的路径都是相对当前.autopkg脚本而言的。
其中可以给指定节添加使用条件
如示例中[Win32,v120,dynamic,debug]
指定了32位平台、使用vs2013、动态库的Debug版。
其中有以下可选选项:
- 平台
可选项 | 说明 |
---|---|
win32 | 32位程序 |
x64 | 64位程序 |
- 编译器
可选项 | 说明 |
---|---|
v110 | vs2012 |
v120 | vs2013 |
v140 | vs2015 |
…… | 其他vs版本的版本号请自行查询 |
- 库类型
可选项 | 说明 |
---|---|
dynamic | 动态库 |
static | 静态库 |
- 编译选项
可选项 | 说明 |
---|---|
Debug | 调试版 |
Release | 发行版 |
这些选项非必选项,如果不写那么就是不针对次选项做适配。不过还是建议这是设置这些选项。
dependencies
dependencies
标识依赖的其他nuget包,格式是:
包id/
包版本号
如果要使用此选项请取消示例中的注释才能生效。
打包
coApp是一个PowerShell工具,所以首先进入PowerShell,进入到脚本目录,然后输入命令。
Write-NuGetPackage .\sample.autopkg
(脚本名替换成自己的脚本名)
如果遇到PowerShell权限问题,请自行查询权限错误信息解决
打包通常后会生成3个包。
- 通用包:包含头文件、文档、lib文件
- redist包:包含dll文件
- symbols包:包含源码和调试信息文件
而通用包会自动依赖redist包,所以我们使用的时候只需要安装通用包即可。symbols包在需要调试源码的时候使用。
上传
c++的nuget包和普通的nuget包上传是一样的。网上有很多资料,所以在此就不赘述了。
更加复杂的脚本
本文中的脚本只包含了通用的功能,更多详细高级用法,请参考coApp官网文档(官网文档很少),或者可以参考github上coApp官方制作的一些脚本。coApp官方将一些常见的开源项目已经制作成了nuget包,这些项目的打包脚本都可以在github上找到。
coApp组织的github地址(https://github.com/coapp-packages),里面有很多项目,打包脚本通常在CoApp分支的copkg文件夹中。