読者です 読者をやめる 読者になる 読者になる

kkAyatakaのメモ帳。

誰かの役に立つかもしれない備忘録。

VC2010のカスタムウィザードを作る その4

最後にプロジェクトの設定を書いて完成。

プロジェクトの設定

プロジェクトの設定は、default.js内の「AddConfig関数」で行う。

function AddConfig(proj, strProjectName)
{
    try
    {
        var config = proj.Object.Configurations('Debug');

        var CLTool = config.Tools('VCCLCompilerTool');
        // TODO: コンパイラ設定を追加する

        var LinkTool = config.Tools('VCLinkerTool');
        // TODO: リンカー設定を追加する
    }
    catch(e)
    {
        throw e;
    }
}

各構成から設定用オブジェクトを取得して、設定することになる。
ここでもリファレンス)が非常に重要になる。
というか、リファレンスがないと、むしろどうしていいかわからない。


プロジェクトには以下の設定をする。

  • 追加のインクルードディレクトリ
  • 追加の依存ファイル
  • デバッグ情報の生成
  • ビルド後イベント
追加のインクルードディレクトリ

CppUnitのヘッダを読み込めるように設定する。
コンパイラの設定なので、以下のとおり。

var config = proj.Object.Configurations('Debug');
var CLTool = config.Tools('VCCLCompilerTool');
CLTool.AdditionalIncludeDirectories += 'libs';

既存設定に追加することになるので、演算子は「+=」。
本当は既存の設定を確保して追加するものが先になるようにしたほうがいいと思うが、
これで問題ないなかったので、問題出るまではこれで。

追加の依存ファイル

CppUnitのライブラリを使うように設定する。
リンカの設定なので以下のとおり。

var config = proj.Object.Configurations('Debug');
var LinkTool = config.Tools('VCLinkerTool');
LinkTool.AdditionalDependencies += "libs/cppunit/cppunitd_dll.lib";

CppUnitデバッグ版とリリース版のファイル名が違うので、
Release構成には" libs/cppunit/cppunit_dll.lib"を設定する。

デバッグ情報の生成

デフォルト設定ではデバッグ情報が生成されないので、デバッグできない。
リンカの設定なので、以下のとおり。

var config = proj.Object.Configurations('Debug');
var LinkTool = config.Tools('VCLinkerTool');
LinkTool.GenerateDebugInformation = true;
ビルド後イベント

dllを使っているので、ビルド後にdllをexeと同じフォルダに配置されるようにしたい。
ビルド後イベントを使って、コピーする。

var config = proj.Object.Configurations('Debug');
var postBuild = config.Tools('VCPostBuildEventTool');
postBuild.CommandLine = 'copy "$(ProjectDir)libs\\cppunit\\cppunitd_dll.dll" "$(TargetDir)"';


以上、全部まとめた関数は以下のとおり。
重複が多少気になるが、まあ、よし。

function AddConfig(proj, strProjectName)
{
    try {
        // Debug
        var config = proj.Object.Configurations('Debug');
        {
            // コンパイラ
            var CLTool = config.Tools('VCCLCompilerTool');
            CLTool.AdditionalIncludeDirectories += 'libs';
            
            // リンカ
            var LinkTool = config.Tools('VCLinkerTool');
            LinkTool.AdditionalDependencies += "libs\\cppunit\\cppunitd_dll.lib";
            LinkTool.GenerateDebugInformation = true;

            // ビルド後イベント
            var postBuild = config.Tools('VCPostBuildEventTool');
            postBuild.CommandLine = 'copy "$(ProjectDir)libs\\cppunit\\cppunitd_dll.dll" "$(TargetDir)"';
        }

        var config = proj.Object.Configurations('Release');
        {
            // コンパイラ
            var CLTool = config.Tools('VCCLCompilerTool');
            CLTool.AdditionalIncludeDirectories += 'libs';

            // リンカ
            var LinkTool = config.Tools('VCLinkerTool');
            LinkTool.AdditionalDependencies += "libs\\cppunit\\cppunit_dll.lib";
            LinkTool.GenerateDebugInformation = true;

            // ビルド後イベント
            var postBuild = config.Tools('VCPostBuildEventTool');
            postBuild.CommandLine = 'copy "$(ProjectDir)libs\\cppunit\\cppunit_dll.dll" "$(TargetDir)"';
        }
    }
    catch(e)
    {
        throw e;
    }
}


ここまでの設定でビルドしてデバッグできる状態になった。
ただ、これは最小の設定で、ほとんどの設定は行われていない。
実際Release構成が存在するが、最適化もされないので、デバッグと大差なかったりする。
必要な設定があれば、リファレンスを参考に設定すればよい。

配布に関して

プロジェクトが完成したら、配布や配置に関連したファイルを必要に応じて編集する。

vszファイル

自身でプロジェクトを作成した場合は、その時点で問題なく利用できるが、
配布した場合は「,vsz」ファイルの「ABSOLUTE_PATH」を利用側で設定する必要がある。


ABSOLUTE_PATHはTemplateとScriptフォルダを格納したフォルダへのパスを、絶対パスで指定する。
オプションでRELATIVE_PATHも存在するが、Program Files内に配置する必要があり、私の好みに合わないので利用しない。


デフォルトでは「マイドキュメント/Visual Studio 2010/Wizards」フォルダに[.ico」、「.vsdir」、「.vsz」を配置すると、
カスタムウィザードとして認識するので、以下のように配置してもらえばよい。

Wizards
  CppUnit
    Scripts
      1041
        default.js
    Templates
      1041
        Templates.inf
  CppUnit.ico
  CppUnit.vsdir
  CppUnit.vsz

あとはvszのABSOLUTE_PATHを各自で書き換えてもらう。

vsdirファイル

VS上に表示される説明テキストやデフォルトプロジェクト名を設定できる。
必要に応じて設定する。