LoginSignup
6

More than 5 years have passed since last update.

native のnugetパッケージを作る

Posted at

coapp c/c++ の Nuget package をビルドするツールです。
自分で nuget パッケージを作った時のノートです。

CoApp を使うと便利なこと

  1. propsを作ってくれます。 Win32|x64, VS2010|VS2012|VS2013, Debug|Release の分岐を生成してくれるのが便利です。
  2. 一度CoApp用ファイルを用意すれば、version を更新するだけでよくなります。
    構成が変わらない限りは、ですが。

CoApp の不便なこと

  1. ファイルのエラーが分からない。
    リリースされた頃よりは分りやすくなっているのですが、何がダメなのか分らないのです。;が抜けているとか、"," を使えないところでつけてしまった場合が、とりあえずファイルエラーしか得られない。

  2. 構文強調サポートがない
    自分で書けばいいのだろうけど、公式の用意している notepad++ 用のファイルしか見たことは無いです。

  3. 情報が見つからない
    利用している人を見かけないです。

setup

公式のインストール手順

  1. ps でスクリプトが実行できる状態にする。
    きっとこの辺り

  2. "coapp" のexeをダウンロード/インストールする。
    インストーラーがあるのでそれ。
    成功したらPowershell を実行し、以下のコマンドで何か数字が出ればOK。
    ps1
    PS> CoAppToolsVersion

    実行結果
    CoApp Powershell Developer Tools Version: 1.23.521.0

hello world

実際にCoAppを利用して、nuget package を作成します。
以下のようなフォルダ構成という想定です。

source/
    myheader.h
    myheader2.h
    debug/
         mylib.lib
         mylib.dll
    release/
         mylib.lib
         mylib.dll
build/
    hello.autopkg
hello.autopkg
nuget {
    nuspec {
        // 識別用のID です。
        // 作成するファイル名に利用されます。
        id =my-hello-world-coapp-library;
        // 作成するnugetパッケージのバージョンです。
        // 作成するファイル名に利用されます。
        version : 1.0.0.1;
        // nuget
        title:coapp hello world library;
        authors:{ushizaki.manabu};
        owners: {ushizaki.manabu};
        licenseUrl: "http://www.apache.org/licenses/LICENSE-2.0";
        projectUrl: "http://localhost";
        iconUrl: "http://localhost";
        requireLicenseAcceptance:false;
        // パッケージマネージャで表示される要約コメント。長いと入らない。
        summary:hello world;
        // パッケージマネージャで表示されるモジュール説明。長い説明はこちら?
        Description:サンプルで作成した nuget パッケージです。;
    };

    files {
        // include 用ファイル指定
        include: {
         ..\source\*.h, 
         // ..\source\*.hpp, // .hpp なヘッダーファイルがあるならば。
         }; 

        // 32bit/release 版 lib/dll の指定
        [Win32, release]
        {
            lib: {
             ..\source\release\mylib.lib,
            };
            bin: {
             ..\source\release\mylib.dll,
            };
        }
        // 32bit/debug 版 lib/dll の指定
        [Win32, debug]
        {
            lib: {
             ..\source\debug\mylib.lib,
            };
            bin: {
             ..\source\debug\mylib.dll,
            };
        }
    };
}

1. powershell を起動、Build フォルダに移動してから、以下のコマンドを実行

Write-NuGetPackage .\hello.autopkg

カレントフォルダ(この場合はBuildフォルダ下)に以下のファイルが作成されます。
* my-hello-world-coapp-library.1.0.0.1.nupkg
これに header と lib が含まれている。
* my-hello-world-coapp-library.redist.1.0.0.1.nupkg
bin(主にdllファイル)で指定したファイルが含まれている。
* my-hello-world-coapp-library.symbols.1.0.0.1.nupkg
bin と symbols(主にpdbファイル) で指定したファイルが含まれている。利用するには、いろいろ用意する必要があるので今回は省略。

Nuget Package Explore で それぞれの nupkg を覗いていみると実際にそれらファイルが含まれていることが分かると思います。

2. ローカルのnuget パッケージ用意

ローカルフォルダをnugetのリポジトリにする等を参考にローカルフォルダをnugetリポジトリに仕立て上げ、そこに、先ほど作った nuget パッケージを移動します。

3. プロジェクトからパッケージ追加

利用したいプロジェクトから、"Nuget パッケージの管理..."より、ローカルのパッケージに
先ほど作成したnugetパッケージが列挙されるはずです。
されない場合は、"ローカルのnuget パッケージ用意" の設定を確認してください。

ビルドすれば、出力フォルダにdllがコピーされます。

includeファイルやlibファイルは、他のnugetと同様に利用しているソリューションのpackagesフォルダ下にあります。

その他

例の hello.autopkg で Write-NuGetPackage を実行すると、値が設定されていない旨の警告が多数出てきますが、自分は private なパッケージしか作っていないので無視しています。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6