|
本サイトは移転しました。旧アドレスからのリダイレクトは2025年03月31日(月)まで有効です。
|
🛈 | ✖ |
wxWidgetsプロジェクト用に導入する機能強化版の統合開発環境Code::Blocksウィザードを説明する。
wxWidgetsプロジェクトウィザード(K2)はwxWidgetsプロジェクトウィザード(K1)と同じく32ビット/64ビット開発に対応しランタイムライブラリは静的リンクをデフォルトとする。新たに以下の機能を追加する。
バーチャルターゲットは複数ターゲットを連続してビルドする機能(Code::Blocks Manual 1.5 Virtual Targets)で[Project|Properties]の[Project/targets options]ダイアログ[Build targets|Build targets|Virtual targets]で設定する。プレ/ポストビルドステップのみ実行するCommands onlyターゲットをDeployバーチャルターゲットに追加し、HTMLヘルプファイル作成、インストーラ作成、リポジトリ更新、バージョン番号リビジョン更新を行わせる。
wxwidgets_k2ウィザードディレクトリをユーザーウィザードディレクトリ(C:\Users\user\AppData\Roaming\CodeBlocks\share\codeblocks\templates\wizard)に配置し、ユーザーウィザードディレクトリのconfig.scriptのRegisterWizards関数に登録する。
ウィザードとして登録されるサブディレクトリは以下のファイルで構成される。
ファイル名 | 内容 | 必要性 |
---|---|---|
logo.png | [New from template]ダイアログ一覧に示されるアイコン | 必須 |
wizard.png | ウィザードダイアログの左に示されるビットマップ | 必須 |
wizard.script | ウィザードスクリプト | 必須 |
wizard.xrc | ウィザードダイアログカスタムページのXRCリソース | オプション |
wxwidgets_k2サブディレクトリは加えて以下のテンプレートファイルを持つ。
分類 | ファイル名 | 内容 |
---|---|---|
プロジェクトファイル | template\app.cpp | アプリケーションソースコードテンプレート |
template\app.h | アプリケーションインクルードテンプレート | |
template\main.cpp | メインウィンドウソースコードテンプレート | |
template\main.h | メインウィンドウインクルードテンプレート | |
template\wx_pch.h | プリコンパイル対象インクルードテンプレート | |
template\resource.rc | ウィンドウズリソーステンプレート | |
template\resource.wxs | メインウィンドウwxSmithリソーステンプレート | |
追加ファイル | template\version_macro.h | バージョンマクロ定義インクルードテンプレートテンプレート |
template\Doxyfile_autoversion | PROJECT_NUMBER定義Doxygen設定テンプレートテンプレート | |
template\favicon.ico | ファビコンテンプレート | |
template\bitmapHelp.xpm | [Help|Help]ビットマップテンプレート | |
template\bitmapAbout.xpm | [Help|About]ビットマップテンプレート | |
template\bitmapQuit.xpm | [File|Quit]ビットマップテンプレート | |
template\InnoSetup.iss | Inno Setupスクリプトテンプレート | |
template\Doxyfile | ソースコード解析用Doxygen設定テンプレート | |
template\Doxyfile_winchm | HTMLヘルプファイル用Doxygen設定テンプレート | |
template\my_header.html | DoxygenヘッダHTMLテンプレート | |
template\my_footer.html | DoxygenフッタHTMLテンプレート | |
template\my_customdoxygen.css | Doxygenカスケードスタイルシートテンプレート | |
template\my_layout.xml | Doxygenレイアウトテンプレート | |
template\mainpage_winchm.md | HTMLヘルプメインページ原稿テンプレート |
Code::Blocksが適切にカスタマイズされている事を前提に、ウィザードは以下のウィザードページを順次表示する。
ウィザードページ | ページID | 種類 | 機能 |
---|---|---|---|
イントロ | WxIntroProject | カスタム | 開発者情報の設定 |
プロジェクトパス | ProjectPathPage | ビルトイン | プロジェクト名とディレクトリの設定 |
プロジェクトコンフィグ | WxConfProject | カスタム | ターゲットとGUIタイプの設定 |
追加ファイル | WxSupplementaryFiles | カスタム | 追加ファイルの設定 |
イントロ、プロジェクトコンフィグ、追加ファイルウィザードページはカスタムウィザードページで、そのXRCリソースはwizard.xrcに含まれる。イントロウィザードページ開発者情報の発行者名(Publisher)は入力必須でファイルシステムが認識できる文字列とする。追加ファイルウィザードページは追加ファイルを選択するが全てチェックしておくのが望ましい。カスタムウィザードページの入力値はCode::Blocks設定ファイル(C:\Users\user\AppData\Roaming\CodeBlocks\default.conf)のXMLエレメントCodeBlocksConfig\scripts\wxwidgets_k2_wizardに記憶され次回デフォルトとなる。
ウィザードスクリプトが追加ファイルのコピーでコールする関数の一部はセキュリティ層で実行する。これらの関数はスクリプトコマンドIO名前空間に属する。
これを理由として[Security Warning!]ダイアログが開きアクションの選択を求められる場合がある。
[Chose your action]ドロップダウンリスト | アクション | 備考 |
---|---|---|
ALLOW execution of this command | そのコマンド実行を許可する | |
ALLOW execution of this command for all scripts from now on | そのコマンド実行を永久に許可する | |
DENY execution of this command | そのコマンド実行を許可しない | デフォルト |
Mark this script as TRUSTED for this session | セッションでスクリプトを信頼する | |
Mark this script as TRUSTED permanentary | 永久にスクリプトを信頼する |
スクリプトを信頼すればセキュリティ層で実行される全てのコマンドが許可される。セッションの信頼はCode::Blocks終了でリセットされる。アクションは[Settings|Scripting]の[Scripting settings]ダイアログの[Security]ページと[Trusts]ページでも変更できる。
最後のウィザードページに[Finish]で応えるとウィザードはスクリプト(wizard.script)実行し、追加ファイルの生成コピー、プロジェクトファイルの生成登録、デプロイを含むプロジェクトセットアップを行う。追加ファイル生成コピーは追加ファイルウィザードページのOnLeaveハンドラ(WxSupplementaryFiles_OnLeave)からコールされる。
スクリプトの作成するターゲットのプレ/ポストビルドステップをまとめるが、ポストビルドステップを定義するターゲットは無い。DebugXX/ReleaseXXのプレビルドステップはビルトイン変数$(TARGET_NAME)利用で全て等しい。_DeployBeginと_DeployEndはDeployバーチャルターゲットで使用されるCommands onlyターゲットである。
Target | Step | Execution steps |
---|---|---|
_DeployBegin | Pre-build | - |
Post-build | - | |
Debug32 | Pre-build | cmd /c $(#codeblocks.bin)\KUdCheck --target $(TARGET_NAME) [[ local t=GetProjectManager().GetActiveProject().GetBuildTarget(ReplaceMacros(_T("$(TARGET_NAME)")));for (local i=0;i<t.GetFilesCount();++i) {print(t.GetFile(i).relativeFilename+_T(" "));} ]] && $(#codeblocks.bin)\KAutoVer --status $(TARGET_NAME) --increment 0.0.0.0(1) --silent || if not ERRORLEVEL 2 exit 1 |
Post-build | - | |
Release32 | Pre-build | cmd /c $(#codeblocks.bin)\KUdCheck --target $(TARGET_NAME) [[ local t=GetProjectManager().GetActiveProject().GetBuildTarget(ReplaceMacros(_T("$(TARGET_NAME)")));for (local i=0;i<t.GetFilesCount();++i) {print(t.GetFile(i).relativeFilename+_T(" "));} ]] && $(#codeblocks.bin)\KAutoVer --status $(TARGET_NAME) --increment 0.0.0.0(1) --silent || if not ERRORLEVEL 2 exit 1 |
Post-build | - | |
Debug64 | Pre-build | cmd /c $(#codeblocks.bin)\KUdCheck --target $(TARGET_NAME) [[ local t=GetProjectManager().GetActiveProject().GetBuildTarget(ReplaceMacros(_T("$(TARGET_NAME)")));for (local i=0;i<t.GetFilesCount();++i) {print(t.GetFile(i).relativeFilename+_T(" "));} ]] && $(#codeblocks.bin)\KAutoVer --status $(TARGET_NAME) --increment 0.0.0.0(1) --silent || if not ERRORLEVEL 2 exit 1 |
Post-build | - | |
Release64 | Pre-build | cmd /c $(#codeblocks.bin)\KUdCheck --target $(TARGET_NAME) [[ local t=GetProjectManager().GetActiveProject().GetBuildTarget(ReplaceMacros(_T("$(TARGET_NAME)")));for (local i=0;i<t.GetFilesCount();++i) {print(t.GetFile(i).relativeFilename+_T(" "));} ]] && $(#codeblocks.bin)\KAutoVer --status $(TARGET_NAME) --increment 0.0.0.0(1) --silent || if not ERRORLEVEL 2 exit 1 |
Post-build | - | |
_DeployEnd | Pre-build | cmd /c $(#codeblocks.bin)\KAutoVer --date no-change --silent |
cmd /c cd doxygen & $(#codeblocks.batch)\k_doxygen_winchm | ||
cmd /c cd innosetup & "C:\Program Files (x86)\Inno Setup 6\ISCC" InnoSetup.iss | ||
cmd /c $(#codeblocks.bin)\KGitWVer --autoversion --tag #{MAJOR}.#{MINOR}.#{BUILD}.#{REVISION} --archive archive\$(PROJECT_NAME)-#{MAJOR}.#{MINOR}.#{BUILD}.#{REVISION}.zip && $(#codeblocks.bin)\KAutoVer --increment 0.0.0.1(A0) --no-update-target --status $(TARGET_NAME) --silent || if not ERRORLEVEL 2 exit 1 | ||
Post-build | - |
DebugXX/ReleaseXXはプレビルドステップでプロジェクトファイルに更新がある場合にのみバージョン番号リリース回数を更新する。_DeployBeginは将来拡張対応として何もせず、_DeployEndはHTMLヘルプファイル作成、インストーラ作成、リポジトリ更新、バージョン番号リビジョン更新を行う。
スクリプトはDeployバーチャルターゲットを作成する。Deployバーチャルターゲットは_DeployStart、ReleaseXX、_DeployEndターゲットを順次ビルドする。ビルドの順番は重要で、特に_DeployEndは必ず最後にビルドする。しかしCode::Blocksの恐らくバグで意図せずビルド順が崩れる場合があり注意する。
バーチャルターゲットのビルド順は、当初は[Project/Properties]メニューで開く[Project/targets options]ダイアログ[Build targets]ページ[Build targets]リストボックスの定義順に従う。これ以降に[Re-order]で定義順を変更するとビルド順は崩れ、当初の定義順でもなく変更後の定義順でもない。さらに定義順を当初に戻してもビルド順は戻らない。一例を示す。
定義順はT1~T4以外のターゲットにも影響され、例えばT2とT3の間にVに登録しない別のターゲットを挿入してもビルド順は崩れる。
定義順とビルド順が一致しない場合は[Build targets]ページ[Virtual targets]で開く[Virtual build targets]ダイアログの[Build targets contained]チェックリストボックスを一時的に変更して元に戻し[Close]すれば良い。なお最も確実にはプロジェクトファイル(.cbp)を確認する必要がある。
スクリプトによるファイル配置をフレームベースのプロジェクトDesktop3を仮定してまとめる。ダイアログベースならDesktop3Frame.*はDesktop3Dialog.*となる。Desktop3.cbpを除き各ファイルはウィザード供給テンプレートファイルから生成する。追加ファイルのうちautoversion-template\version_macro.hだけは生成コピー後にプロジェクトファイルに登録する。
ディレクトリ | ファイル | 内容 | 分類 | テンプレートファイル |
---|---|---|---|---|
[プロジェクトディレクトリ] | Desktop3.cbp | Code::Blocksプロジェクト | 自動生成ファイル | - |
│ | Desktop3App.cpp | アプリケーションクラスソースコード | プロジェクトファイル | app.cpp |
│ | Desktop3App.h | アプリケーションクラスインクルード | app.h | |
│ | Desktop3Frame.cpp | メインウィンドウクラスソースコード | main.cpp | |
│ | Desktop3Frame.h | メインウィンドウクラスインクルード | main.h | |
│ | wx_pch.h | プリコンパイル対象インクルード | wx_pch.h | |
│ | resource.rc | ウィンドウズリソース | resource.rc | |
├ wxsmith | Desktop3Frame.wxs | wxSmithリソース | resource.wxs | |
├ autoversion-template | version_macro.h | バージョンマクロ定義インクルードテンプレート | 追加ファイル | version_macro.h |
│└ doxygen | Doxyfile_autoversion | PROJECT_NUMBER定義Doxygen設定テンプレート | Doxyfile_autoversion | |
├ iconimages | favicon.ico | ファビコン | favicon.ico | |
│ | bitmapHelp.xpm | [Help|Help]ビットマップ | bitmapHelp.xpm | |
│ | bitmapAbout.xpm | [Help|About]ビットマップ | bitmapAbout.xpm | |
│ | bitmapQuit.xpm | [File|Quit]ビットマップ | bitmapQuit.xpm | |
├ innosetup | InnoSetup.iss | Inno Setupスクリプト | InnoSetup.iss | |
└ doxygen | Doxyfile | ソースコード解析用Doxygen設定 | Doxyfile | |
│ | Doxyfile_winchm | HTMLヘルプファイル用Doxygen設定 | Doxyfile_winchm | |
│ | my_header.html | ヘッダHTML | my_header.html | |
│ | my_footer.html | フッタHTML | my_footer.html | |
│ | my_customstylesheet.css | カスケードスタイルシート | my_customdoxygen.css | |
│ | my_layout.xml | レイアウト | my_layout.xml | |
└ winchm | mainpage_winchm.md | HTMLヘルプトップページ用原稿 | mainpage_winchm.md |
生成ソースコードはwxWidgets project (K1)に動作確認(3)で加えたコードをあらかじめ追加したものになる。それ以外の主な変更点として、コード中のプロジェクト固有文字列(アプリケーション名と開発者情報の一部)定義をKAutoVerテンプレートファイル(autoversion-template\version_macro.hとautoversion-template\doxygen\Doxyfile_autoversion)に集中した。他のファイルはテンプレートファイルから生成された(プレースホルダー文字列がバージョン番号に置換された)ファイル(version_macro.hとdoxygen\Doxyfile_autoversion)をインクルードしてマクロ(MYAPPINFO_NAMEなど)で参照する。開発途上でコード中のアプリケーション名を変更するための処置だが、別にアプリケーション名ベースでプロジェクトファイル名(Desktop3.cbp)、実行形式ファイル名(Desktop3.exe)、クラス名(Desktop3App、Desktop3Frame)なども定義されているので変更は慎重さが求められる。
Doxyfile_autoversionで定義するオプションは念のためコメントアウト(文頭#)する(インクルード前なので不要だが)。
先にインクルードするDoxyfile経由でDoxyfile_autoversionのCHM_FILEを使うためコメントアウト(文頭#)する。
スクリプトの設定するオプションは全てスクリプトにハードコーディングされている。カスタマイズされる可能性の高いオプションはスクリプト冒頭でルートテーブルスロット(C++で言うグローバル変数)に代入していて、以下を除きwxWidgets project (K1)から変更されていない。
スロット名 | 内容 | 初期設定 | 備考 |
---|---|---|---|
g_MyFolder | ウィザードサブディレクトリ名 | _T("wxwidgets_k2") | |
g_DefaultProjAuthor | [AUTHER_NAME]に置換される文字列デフォルト | _T("Takeshi Kodama") | テンプレートファイル置換処理 |
g_DefaultProjEmail | [AUTHER_EMAIL]に置換される文字列デフォルト | _T("") | テンプレートファイル置換処理 |
g_DefaultProjWebsite | [AUTHER_WWW]に置換される文字列デフォルト | _T("https://kodamadeveloped.main.jp/lets-programming/") | テンプレートファイル置換処理 |
g_DefaultProjPublisher | [AUTHER_PUBLISHER]に置換される文字列デフォルト | _T("KodamaDeveloped") | テンプレートファイル置換処理 |
... | ... | ... | ... |
開発者情報がハードコーディングされているwxWidgets project (K1)と異なりウィザードページで変更可能なため、スクリプトのカスタマイズを必須としない。
wxWidgets project (K2)の生成するアプリケーションはwxWidgets project (K1)をベースに以下の改良を加えた。