|
本サイトは移転しました。旧アドレスからのリダイレクトは2025年03月31日(月)まで有効です。
|
🛈 | ✖ |
wxWidgetsプロジェクト用に導入する統合開発環境Code::Blocksウィザードを説明する。
Code::Blocksはスクリプトで機能拡張できる。スクリプト言語はSquirrelを用いる。ウィザードスクリプトは[File|New|Project]などの表示する[New from template]ダイアログの[Projects]、[Build tagets]、[Files]、[Custom]ページに一覧される各ウィザードを実行する。
wxWidgetsライブラリによるウィンドウズデスクトップアプリケーション開発用に本サイトが作成したウィザードwxWidgets project (K1)について説明する。
ウィザードはウィザードディレクトリにサブディレクトリとして配置される。ウィザードディレクトリはCode::Blocksインストールディレクトリ(C:\Program Files (x86)\CodeBlock)階層下、あるいはユーザーディレクトリ(C:\Users\user)階層下のどちらかである。
前者はCode::Blocks標準添付ウィザード用でユーザーがこれを改変する事は想定されない。後者はユーザーカスタマイズ用で後者の設定が必ず前者に優先する。ウィザードディレクトリのconfig.scriptはRegisterWizards関数内でCode::Blocksにウィザードを登録する。
上記の例はwxwidgets_k1サブディレクトリをwxWidgets project (K1)という名称でプロジェクトウィザードのGUIカテゴリに登録する。ウィザードとして登録されるサブディレクトリは以下のファイルで構成される。
ファイル名 | 内容 | 必要性 |
---|---|---|
logo.png | [New from template]ダイアログ一覧に示されるアイコン | 必須 |
wizard.png | ウィザードダイアログの左に示されるビットマップ | 必須 |
wizard.script | ウィザードスクリプト | 必須 |
wizard.xrc | ウィザードダイアログカスタムページのXRCリソース | オプション |
wxwidgets_k1サブディレクトリは加えて以下のテンプレートファイルを持つ。
ファイル名 | 内容 |
---|---|
template\app.cpp | アプリケーションソースコードテンプレート |
template\app.h | アプリケーションインクルードテンプレート |
template\main.cpp | メインウィンドウソースコードテンプレート |
template\main.h | メインウィンドウインクルードテンプレート |
template\wx_pch.h | プリコンパイル対象インクルードテンプレート |
template\resource.rc | ウィンドウズリソーステンプレート |
template\resource.wxs | メインウィンドウwxSmithリソーステンプレート |
Code::Blocksが適切にカスタマイズされている事を前提に、ウィザードは以下のウィザードページを順次表示する。
ウィザードページ | ページID | 種類 | 機能 |
---|---|---|---|
イントロ | WxIntro | ビルトイン | イントロメッセージの表示 |
プロジェクトパス | ProjectPathPage | ビルトイン | プロジェクト名とディレクトリの設定 |
プロジェクトコンフィグ | WxConfProject | カスタム | ターゲットとGUIタイプの設定 |
プロジェクトコンフィグウィザードページは本サイトの作成したカスタムウィザードページで、そのXRCリソースはwizard.xrcに含まれる。カスタムウィザードページの入力値はCode::Blocks設定ファイル(C:\Users\user\AppData\Roaming\CodeBlocks\default.conf)のXMLエレメントCodeBlocksConfig\scripts\wxwidgets_k1_wizardに記憶され次回デフォルトとなる。
最後のウィザードページに[Finish]で応えるとウィザードはスクリプト(wizard.script)の各ステップを実行する。wxWidgetsライブラリはデバッグビルド/リリースビルドで切り替える可能性があるためプロジェクトオプションでなくターゲットオプションとする。ただし本サイトがMSYS2で導入するwxWidgetsはリリースバージョンのみで、それぞれに同じ設定を用いる。
スクリプトの設定するオプションは全てスクリプトにハードコーディングされている。そのほとんどは実装関数内に記述されるが、カスタマイズされる可能性の高いオプションはスクリプト冒頭でルートテーブルスロット(C++で言うグローバル変数)に代入している。
スロット名 | 内容 | 初期設定 | 備考 |
---|---|---|---|
g_MyFolder | ウィザードサブディレクトリ名 | _T("wxwidgets_k1") | |
g_ProjAuthor | [AUTHER_NAME]に置換される文字列 | _T("Takeshi Kodama") | テンプレートファイル置換処理 |
g_ProjEmail | [AUTHER_EMAIL]に置換される文字列 | _T("") | テンプレートファイル置換処理 |
g_ProjWebsite | [AUTHER_WWW]に置換される文字列 | _T("") | テンプレートファイル置換処理 |
g_PCHMode | プリコンパイル済みヘッダ配置 | pchSourceDir | pchSourceDir, pchObjectDir, pchSourceFile |
g_MingwCompilerID32 | 32ビットコンパイラID | GetCompilerFactory() .GetCompilerIDByName(_T("GNU GCC Compiler (32bit)")) | Code::Blocksコンパイラ名から取得 |
g_MingwCompilerID64 | 64ビットコンパイラID | GetCompilerFactory() .GetCompilerIDByName(_T("GNU GCC Compiler (64bit)")) | Code::Blocksコンパイラ名から取得 |
g_MingwInclude32 | 32ビット標準インクルードディレクトリ絶対パス | _T("$(#mingw32.include)") | Code::Blocksグローバル変数 |
g_MingwLib32 | 32ビット標準ライブラリディレクトリ絶対パス | _T("$(#mingw32.lib)") | Code::Blocksグローバル変数 |
g_MingwInclude64 | 64ビット標準インクルードディレクトリ絶対パス | _T("$(#mingw64.include)") | Code::Blocksグローバル変数 |
g_MingwLib64 | 64ビット標準ライブラリディレクトリ絶対パス | _T("$(#mingw64.lib)") | Code::Blocksグローバル変数 |
g_WxIncludeSubPath | wxWidgetsインクルードディレクトリ相対パス | _T("wx-3.0") | g_MingwIncludeXXからの相対パス |
g_WxLibSubPath | wxWidgetsライブラリディレクトリ相対パス | _T("") | g_MingwLibXXからの相対パス |
g_WxIncludeFileToCheck | wxWidgetsインストール確認用ファイル相対パス | _T("wx/wx.h") | g_MingwIncludeXXからの相対パス |
g_WxLibHasDebugVersion | wxWidgetsデバッグバージョン存否 | false | true, false |
g_WxLibNameListDebug | デバッグビルド用wxWidgetsライブラリファイルリスト | [_T("libwx_mswu_core-3.0.a") ,_T("libwx_baseu-3.0.a") ,_T("libwxtiff-3.0.a") ,_T("libwxjpeg-3.0.a") ,_T("libwxpng-3.0.a") ,_T("libwxzlib-3.0.a") ,_T("liblzma.a") ,_T("libjbig.a")] | |
g_WxLibIncludeSetupSubPathDebug | デバッグビルド用wxWidgetsセットアップインクルードディレクトリ相対パス | _T("wx/include/msw-unicode-static-3.0") | g_MingwLibXXからの相対パス |
g_WxLibNameListRelease | リリースビルド用wxWidgetsライブラリファイルリスト | [_T("libwx_mswu_core-3.0.a") ,_T("libwx_baseu-3.0.a") ,_T("libwxtiff-3.0.a") ,_T("libwxjpeg-3.0.a") ,_T("libwxpng-3.0.a") ,_T("libwxzlib-3.0.a") ,_T("liblzma.a") ,_T("libjbig.a")] | |
g_WxLibIncludeSetupSubPathRelease | リリースビルド用wxWidgetsセットアップインクルードディレクトリ相対パス | _T("wx/include/msw-unicode-static-3.0") | g_MingwLibXXからの相対パス |
g_ProjAuthorは必ずあなたの名前で書き換える。g_PCHModeは[Project|Properties]の[Project/target options]ダイアログ[Project settings|Precompiled headers|Strategy]を設定する。初期設定のいくつかはCode::Blocksカスタマイズを利用するが、値を直接書き込んでも問題ない。本サイトのwxWidgetsライブラリはリリースバージョンのみでg_WxLibNameListDebugとg_WxLibNameListRelaseは等しい。静的リンクするためlibwxtiff-3.0.a以下のライブラリファイルを必要とする。デバッグバージョンが得られる場合はg_WxLibHasDebugVersionをtrueとする。g_WxLibIncludeSetupSubPathDebugとg_WxLibIncludeSetupSubPathReleaseはwx/setup.hファイルの探索パスを指定する。
wxWidgets project (K1)が使うスクリプトは実験的にターゲットウィザード対応も実装しているが、その使用はあまり推奨しない。
標準的なターゲットウィザードはビルトインのBuildTargetPageウィザードページを表示し、ウィザードダイアログを閉じた後にターゲットを作成する。一方、このターゲットウィザードはカスタムウィザードページでターゲットを作成するが、それでもウィザードダイアログが閉じた後にBuildTargetPageの入力(実際は表示されておらず何の入力もされていない)でターゲット作成を試みエラーとなる。このエラーは無害で無視できるが、標準的なターゲットウィザードの振る舞いと大きく異なる。
既存プロジェクトにターゲットを追加する場合は、[Project|Properties]の[Project/target options]ダイアログ[Build targets|Build targets|Duplicate]で既存ターゲットを複製し修正するほうが、ターゲットウィザードを用いるより簡単な事が多い。