使用CoApp創建NuGet C++靜態庫包

来源:http://www.cnblogs.com/lgxZJ/archive/2017/06/25/7077174.html
-Advertisement-
Play Games

NuGet是微軟開發平臺下的包管理軟體,使用它你可以非常方便的將一些第三方的庫、框架整合進自己的項目中,省去了不少麻煩的配置過程。但是從官方文檔上來看,貌似NuGet對C++的支持不是很好,並且在現階段推薦使用CoApp來簡化包的構建。 1. 環境要求 NuGet 2.5 及以上(較新版本才加入了對 ...


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: [email protected];
    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 : { "doc\html\* }; 我們指定相對目錄doc\html下的所有文件為文檔。

3.庫文件、PDB文件:對於這些文件我們需要指定目標平臺、VS版本和開發模式:

[x86, v140, debug] {
    lib:        builds\vs2015\libeasy\Debug\libeasyd.lib;
    symbols:    builds\vs2015\libeasy\Debug\libeasy.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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 連接資料庫的八大步驟 Step1:鏈接資料庫 mysqli_connect() 參數: ①主機地址 ②mysql用戶名 ③mysql密碼 ④選擇連接的資料庫 ⑤埠號 返回:如果連接成功,返回資源類型的標誌符號;如果連接失敗,返回false。 如果我們與mysql建立的連接不只一條,那麼以後操作數據 ...
  • redis對象 redis中有五種常用對象 我們所說的對象的類型大多是值的類型,鍵的類型大多是字元串對象,值得類型大概有以下幾種,但是無論哪種都是基於redisObject實現的 redisObject的結構如下 type的可選值有五種.分別是 REDIS_STRING, REDIS_LIST, R ...
  • 情景linux shell如何實現多線程? 情景 shell腳本的執行效率雖高,但當任務量巨大時仍然需要較長的時間,尤其是需要執行一大批的命令時。因為預設情況下,shell腳本中的命令是串列執行的。如果這些命令相互之間是獨立的,則可以使用“併發”的方式執行這些命令,這樣可以更好地 利用系統資源,提升 ...
  • 本文目錄: 13.1 Linux數據包轉發功能 13.2 和網路相關的幾個文件說明 13.2.1 網卡配置文件ifcfg-* 13.2.2 DNS配置文件/etc/resolve.conf 13.2.3 /etc/udev/rules.d/70-persistent-net.rules 13.2.4 ...
  • 虛擬機無桌面的Linux 與 物理機Windows 文件互傳有很多種方法,現在先說一種通過共用文件夾的形式,其他方法後續再補充 1、 背景 1) 虛擬機系統:VMWare無桌面的Linux 2) 物理機系統:Win 7 3) 共用文件夾:物理機的D:\Virtual Machines\shared_ ...
  • 1.第一種方法是最常用的 :如果下載了Xshell和Xftp,Ctrl+Alt+F就可以選擇文件的互傳了!(虛擬機/雲伺服器通用)--只要相互間能ping得通。 2.第二種方法 :ubuntu環境下安裝lrzsz,具體命令是 > sudo apt-get install lrzsz (如果是root ...
  • 本文轉自:[FFmpeg 入門(2):輸出視頻到屏幕 | www.samirchen.com][2] SDL 我們這裡使用 SDL 來渲染視頻到屏幕。SDL 是 Simple Direct Layer 的縮寫,是一個優秀的跨平臺多媒體庫,你可以從 [http://www.libsdl.org][3] ...
  • 使用wget下載整個FTP目錄,可以用於伺服器間文件傳輸,進行遠程備份。通過限制網速,可以解決帶寬限制問題。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...