この章では、コード・ジェネレータとその使い方 (コードの生成、生成されたコードへのユーザ・コードの追加、アプリケーションの Make、およびコンパイル済みアプリケーションの実行) について説明します。コード・ジェネレータ・ウィンドウの解説とその要素については、「コード・ジェネレータ・ウィンドウ」を参照してください。
2 つのシナリオを紹介します。最初は、1 回の手順でアプリケーションの構築と実行を行うものです。2 番目は、コードの生成、そのコンパイル、およびアプリケーションの実行を別の手順で行うものです。
どちらの場合も、保存していないプロジェクトを変更した場合、メッセージ・ダイアログ・ボックスが表示され、編集内容が保存されていないことを通知するので、コード生成の作業を取り消すか、プロジェクトを保存するかを選択してください。プロジェクトの保存を選択した場合、以前に保存していないならば、プロジェクトの保存場所を指定しなければなりません。
[Make&実行] をクリックして、コードの生成、アプリケーションの構築、およびその実行を行います。
プロジェクトを保存し、すべてが正常実行された場合、コード・ジェネレータの一番上の出力区画に、多数のメッセージが表示されます。最後のメッセージは「実行中:./[projectname]」で、アプリケーションが実行されます。
少なくとも、アプリケーションの主ウィンドウは表示されます。アプリケーションの起動時に表示されるように設定していないウィンドウは表示されません。ユーザが選択した、ユーザ・コードを必要としない機能に基づいて、アプリケーションはメニューの表示、接続のテスト、アイテムヘルプの表示などのさまざまな処理を行います。
最終的には、コードを記述して、アプリケーションを完成しなければなりません。たとえば、接続エディタで指定した [関数呼び出し] コールバックは置きかえなければなりません。詳細は、「生成されたコードへのユーザ・コードの追加」を参照してください。
[コードの生成] をクリックして、現在のプロジェクトのコードを生成します。
コード・ジェネレータが起動すると、コード・ジェネレータ・ウィンドウの一番上にある出力区画にメッセージが表示されます。最後のメッセージは、「正常終了しました。」です。多数のファイル (Makefile、プロジェクト・ファイル、モジュール・ファイル、2 つの dtb_utils ファイルなど) が作成されます。コード・ジェネレータ・ウィンドウの一番下にある端末区画で、ファイルを参照できます。
[Make] をクリックして、アプリケーションを構築します。
アプリケーションのコンパイル時には、より多くのメッセージが出力区画に表示されます。最後のメッセージは「正常終了しました。」です。さらに数個のファイルが作成されます。このファイルには、オブジェクト・ファイルや実行形式アプリケーション・ファイル (プロジェクトに与えた名前を持っています) などが含まれます。
コマンド行で実行形式名を入力した時のように、アプリケーションが起動します。
アプリケーションは終了し、すべてのウィンドウが閉じます。また、[中止] をクリックして、コード・ジェネレータ・ウィンドウで開始したコードの生成や make 操作を終了することもできます。
生成するコードを決定するオプションと、その他のコード・ジェネレータ機能を変更するには、次の手順を実行します。
アプリケーション・ビルダの主ウィンドウの [ファイル] メニューから [コード・ジェネレータ] を選択して、コード・ジェネレータ・ウィンドウを表示します。
[オプション] メニューから [ジェネレータ] を選択して、[コード・ジェネレータ・オプション] ダイアログ・ボックスを表示します。
[コードの生成対象] オプション ([プロジェクト全体]、[メインのみ]、[特定のモジュールのみ]、[特定のモジュールとメイン]) の 1 つを選択します。
[特定のモジュール] または [特定のモジュールとメイン] を選択すると、モジュールのリストがアクティブになります。このリストから、コードの生成対象とするモジュール名を選択します。
手作業で編集したコードを生成コードとマージしたくない場合は、[マージ禁止] をクリックします。
ユーザ・コードを破棄したくない場合は、[マージ禁止] を選択しないでください。
必要であれば、別のメッセージ通知オプションを選択します。
選択肢は、[正常メッセージの通知]、[サイレントで]、および [冗長で] です。
必要であれば、[Make 引き数] を入力します。
この引き数は、[Make] または [Make& 実行] をクリックすると取り込まれます。
必要であれば、[ランタイム引き数] を入力します。
この引き数は、[実行] または [Make&実行] をクリックすると取り込まれます。
[デフォルト設定のリセット] をクリックして、すべてのフィールドにデフォルト値を設定します。
デフォルト値は、[プロジェクト全体のコードを生成]、[ユーザ・コードを生成コードとマージ]、および [正常メッセージの通知] です。
[了解] か [適用] をクリックして変更します。
[了解] をクリックした場合は、[オプション] ダイアログ・ボックスが終了します。
アプリケーション・ビルダの主ウィンドウの [ファイル] メニューから [コード・ジェネレータ] を選択して、コード・ジェネレータ・ウィンドウを表示します。
[オプション] メニューから [環境] を選択して、[環境オプション] ダイアログ・ボックスを表示します。
[変数名] テキスト・フィールドに、変数を入力します。
たとえば、PATH の変更です。
[取得] をクリックして、現在の変数値を [変数名] に表示します。
変数の値が [変数] 区画に表示されます。
値を書き換え、[設定] をクリックして、変数値を変更します。
この変更は、このアプリケーション・ビルダのセッションに対してだけ適用されます。
[リセット] をクリックして、[値] をアプリケーション・ビルダの、このセッション外の値にリセットします。
[取消し] をクリックして、ダイアログ・ボックスを閉じます。
コマンド行からアプリケーション・ビルダのコードを生成するには、dtcodegen を実行します。使用方法は次のとおりです。
使用方法:dtcodegen [options] [project-file ] [module-file [module-file] ...]
コードは、コマンド行で指定した各モジュールに対して、またはモジュールの指定がない場合はプロジェクトの全モジュールに対して生成されます。プロジェクト・ファイルを指定しない場合は、指定したモジュールを含むプロジェクト・ファイルが、現在のディレクトリ内で検索されます。
拡張子 .bip を持つファイルは BIL プロジェクト・ファイル、拡張子 .bix を持つファイルはカプセル化された BIL ファイル、拡張子 .bil を持つファイルは BIL モジュール・ファイルと見なされます。
オプション (* はデフォルト、+ はプロジェクト・ファイルを持たない場合のデフォルト)
このヘルプ・メッセージを表示します。
main() を含むファイルを書きます。
変更されたファイルのみを生成します。
生成された _stubs.c ファイルを以前のバージョンとマージします。
既存と新規の stubs ファイルをマージしません。
コードの生成対象となるプロジェクトを指定します。
デフォルトのプロジェクト設定を使用し、プロジェクト・ファイルを無視します。
アプリケーションが、起動時にすべてのウィンドウを表示 (マップ) します。
アプリケーションが、初期に見えるウィンドウだけを表示 (マップ) します。
サイレント・モードです。メッセージを出力しません。
冗長モードです。詳細な経過メッセージを出力します。
[コード・ジェネレータ] ウィンドウで [コードの生成] をクリックするか、コマンド行から dtcodegen を実行して展開したインタフェースのコードを生成すると、プロジェクト・フォルダに多数のファイルが生成されます。たとえば、プロジェクトが「test」という名前で、「mod1」という名のモジュールを 1 つ持っている場合、次のファイルが作成されます。
Makefile (他のプラットフォームの Makefile を含む)
dtb_utils.c
dtb_utils.h
mod1.bil (モジュール・ファイル)
mod1_stubs.c
mod1_ui.c
mod1_ui.h
test.bip (プロジェクト・ファイル)
test.c
test.h
Test (リソース・ファイル)
接続エディタで、[関数呼び出し] または [実行コード] 接続を行なった場合、これらの接続は生成されたコードに反映されます。ユーザによる変更が可能な生成コードのすべての領域は、次のような形式のコメント行でマークされています。
/* DTB_USER_CODE_START */ /* DTB_USER_CODE_END */
START および END 間の領域は、「ユーザ・セグメント」と見なされます。任意のテキスト (C 以外のコードであっても) をユーザ・セグメント内に追加できます。コード・ジェネレータは、このコードを次期以降の全バージョンにおいて保持します。各ユーザ・セグメントは、そのセグメントに追加すべきコードのタイプ、またはそのセグメントの実行時におけるアプリケーションの状態を促すコメントで開始されます。この提示は、純粋に情報を提供しているだけで、無視される場合があります。
アプリケーション・ビルダもコード・ジェネレータも、ユーザが追加するコードが正当な C コードであるか確認しません。変更したファイルがコンパイラで正常に処理できるかどうかはユーザの責任です。
手作業で編集したコードをすべて破棄する場合は、コード・ジェネレータ・ウィンドウの [オプション] ダイアログから [マージ禁止] を明示的に選択するか、dtcodegen を -nomerge オプション付きで実行する必要があります。これは、大量の作業が失われる可能性があるので、慎重に実行してください。
どのような環境下でも、生成されたコメントを変更しないでください。変更した場合、コード生成に失敗し、その結果のファイルはコンパイルできない可能性があります。このような状態からの復旧を補助するために、拡張子 .BAK を持つバックアップ・ファイルが現在のディレクトリに格納されます。
ユーザ・コードは機能ごとに分けて作られるので、ユーザは生成されたアプリケーションを簡単にカスタマイズできます。main() に関連するすべてのコードと、アプリケーション全体のデータおよび構造体が、projectname>.h と <projectname>.c に定義されます。これらのファイルでは、アプリケーションの Xt リソースのデータ構造にフィールドが追加され、開発者が定義した新規のデータ型および変数が追加され、アプリケーションの起動プロシージャが修正されます。
各 <modulename>_stubs.c ファイルには、生成された接続の効果を変更するためのユーザ・セグメントがあります。ユーザのコードは、自動生成されたコードの実行前と後の両方に追加されることがあります。
さらに、各ファイルの最上部には、カスタム・ヘッダまたは著作権表示を追加するのに使用できるユーザ・セグメントがあります。