# コードの生成とアプリケーションの構築

この章では、コード・ジェネレータと、コード・ジェネレータの使用したコードの生成、 生成コードへのユーザコードの追加、アプリケーションのMake、コンパイルしたアプリケ ーションの実行について説明します。コード・ジェネレータ・ウィンドウとその要素の説明は、 ABUG.apWDB.mkr.9を参照してください。

ABUG.codeg.mkr.2
ABUG.codeg.mkr.2
ABUG.codeg.mkr.4
ABUG.codeg.mkr.6
ABUG.codeg.mkr.5

## アプリケーションのMakeと実行

2つのシナリオを以下で説明します。1つめのシナリオは、1ステップで、アプリケーション の構築と実行を行います。2つめのシナリオは、別々のステップで、コードの生成、コード のコンパイル、およびアプリケーションの実行を行います。

どちらの場合も、保存していないプロジェクトを変更すると、ダイアログ・ボックスが 表示され、コード生成の処理を取消すか、またはプロジェクトの保存するの選択を、ユーザに 要求します。プロジェクトに保存する選択を行ったとき、以前に保存をしたことがない 場合は、プロジェクトを保存する場所を指定する必要があります。

### 1ステップでMakeおよび実行をするには

1. アプリケーション・ビルダの主ウィンドウの[ファイル]メニューから[コード・ジェネレータ] を選択します。

   コード・ジェネレータが表示されます。

2. [Make & 実行]をクリックし、コードの生成、アプリケーションの構築および実行を行います。

   プロジェクトを保存し、すべてが正常にいくと、コード・ジェネレータの一番上にある 出力区画に多くのメッセージが表示されます。最後のメッセージは、「Running: ./[projectname] (実行中: ./[プロジェクト名])」 です。このメッセージが表示されるとアプリケーションが実行されます。

   少なくとも、アプリケーション・ビルダの主ウィンドウは表示されています。アプリケーション の起動時に表示しないように設定したウィンドウは、隠されます。ユーザが選んだ、 ユーザ・コードを必要としない機能に基づいて、アプリケーションは、様々な処理 (メニュー表示、接続のテスト、アイテム・ヘルプ表示など)を行います。

最終的には、アプリケーションを完成するには、コードを記述しなければなりません。 たとえば、接続エディタで指定する[関数呼び出し]コールバックは、置き換えなくては なりません。詳細は、ABUG.codeg.mkr.6を参照してください。

### コード作成、Make、および実行を別々に行うには

1. [コードの生成]をクリックして、現在のプロジェクトのコードを生成します。

   コード・ジェネレータが起動されると、コード・ジェネレータ・ウィンドウの一番上の 出力区画にメッセージが表示されます。最後に出力されるメッセージは、「Completed successfully.(正常に完了しました。)」です。 Makefile、プロジェクト・ファイル、モジュール・ファイル、および2つの`dtb_utils`ファイル を含む多くのファイルが生成されます。コード・ジェネレータ・ウィンドウの一番下に ある端末区画で、生成されたファイルを見ることができます。

2. [Make]をクリックして、アプリケーションを構築します。

   アプリケーションがコンパイルされたとき、多くのメッセージが、出力区画に表示され ます。最後に出力されるメッセージは、「Completed successfully.(正常に完了しました。)」です。 オブジェクト・ファイル、実行形式のアプリケーション・ファイルを含む数個のファイル が生成され、これらのファイルには、ユーザがプロジェクトにつけた名前がついています。

3. [実行]をクリックして、アプリケーションを実行します。

   コマンド行で実行形式のファイルを入力したときのように、アプリケーションが起動します。

4. [中止]をクリックすると、アプリケーションが終了します。

   これでアプリケーションは終了し、ウィンドウが閉じます。また、[中止]をクリックして、 コード・ジェネレータ、またはコード・ジェネレータ・ウィンドウで起動した `make`操作も 終了できます。

### コード・ジェネレータのオプションを設定するには

生成されるコード、またはその他のコード・ジェネレータ機能を決定するには、次のようにします。

1. アプリケーション・ビルダの主ウィンドウの[ファイル]メニューから[コード・ジェネレータ]を 選択します。

2. [オプション]メニューから[ジェネレータ]を選択すると、コード・ジェネレータ・オプション ・ダイアログ・ボックスが表示されます。

3. [コードの生成対象]オプション([プロジェクト全体]、[メインのみ]、 [特定のモジュールのみ]、[特定のモジュールとメイン])の1つを選択します。

   [特定のモジュールのみ]、または[特定のモジュールとメイン]を選択すると、モジュールが アクティブになります。コードを生成したいモジュールの名前を、リストからクリックします。

4. 手作業で編集したコードを生成コードにマージしたくないときは、[マージ禁止]をクリック します。

   ユーザ・コードを破棄したくない場合は、[マージ禁止]をクリックしてはいけません。

5. 必要であれば、メッセージを通知するオプションを選択します。

   選択肢は、[正常メッセージの通知]、[サイレントで]、[冗長で]です。

6. 必要であれば、[Make 引き数]を入力します。

   [Make]または[Make&実行]をクリックしたときに、これらの変数は取り込まれます。

7. 必要であれば、[実行時引き数]を入力します。

   [実行]または[Make&実行]をクリックしたときに、これらの変数は取り込まれます。

8. [デフォルト設定にリセット]をクリックすると、すべてのフィールドにデフォルト値を設定ます。

9. [了解]または[適用]をクリックして変更を行います。

   [了解]をクリックすると、オプション・ダイアログ・ボックスが終了します。

### 環境オプションを設定するには

1. アプリケーション・ビルダの主ウィンドウの[ファイル]メニューから[コード・ジェネレータ] を選択し、コード・ジェネレータ・ウィンドウを表示します。

2. [オプション]メニューから[環境]を選択して、環境オプション・ダイアログ・ボックスを表示します。

3. [変数名]テキスト・フィールドに変数を入力します。

   たとえば、`PATH`環境変数を変更するとします。

4. [取得]をクリックして、[変数名]に変数の現在の値を表示します。

   変数の値が、[値]区画に表示されます。

5. [値]を変更して、[設定]をクリックし、変数の値を変更します。

   この変更は、アプリケーション・ビルダのセッションのみに適用されます。

6. [リセット]をクリックすると、[値]がアプリケーション・ビルダのセッション外の値にリセット されます。

7. [キャンセル]をクリックして、ダイアログ・ボックスを終了します。

### コマンド行からコードを生成するには

コマンド行からアプリケーション・ビルダのコードを生成するには、`dtcodegen`を実行します。使用方法は以下のとおりです。

使用方法: `dtcodegen` [options ] [project-file] [ module-file [module-file] ...]

コードは、コマンド行で指定した各モジュール、またはプロジェクト内のすべてのモジュール に対して生成されます。モジュールを指定しないと、プロジェクトのすべてのモジュールに対して 生成されます。プロジェクトファイルが指定されていないときは、指定したモジュールを 含むプロジェクトが、現在のディレクトリから検索されます。

拡張子`.bip`を持つファイルはBILプロジェクト・ファイルとみなされ、 拡張子`.bix`をもつファイルはカプセル化されたBILファイルとしてみなされます。 拡張子`.bil`をもつファイルは、BILモジュール・ファイルとみなされます。

オプション(* はデフォルト、+ はプロジェクト・ファイルを持たないデフォルト)
`-help (-h)` | ヘルプ・メッセージを表示します。
`-main` | main()を含むファイルを記述します。
`-changed` | 変更されたファイルのみを生成します。
`* -merge` | 生成された_stubs.cファイルと以前のバージョンをマージします。
`-nomerge` | 既存および新規stubsファイルをマージしません。
`* -project (-p)` | コードの生成対象となるプロジェクトを指定します。
`-noproject (-np)` | プロジェクトの設定にデフォルトを使用し、プロジェクト・ファイルを無視します。
`+ -showall` | アプリケーションが起動時にすべてのウィンドウを表示(マップ)します。
`* -noshowall` | アプリケーションが初期に表示するように指定したウィンドウを表示(マップ)します。
`-silent (-s)` | サイレント・モードです。メッセージは記述されません。
`-verbose (-v)` | 冗長モードです。詳細な経過メッセージを出力します。

## 生成コードへのユーザ・コードの追加

コード・ジェネレータの[コードの生成]をクリックするか、またはコマンド行から `dtcodegen`を実行してインタフェースのコードを生成すると、プロジェクト・フォルダに 多数のプロジェクトが作成されます。たとえば、プロジェクトが 「test」という名で、 「mod1」という名の1つのモジュールを持っている場合は、以下のファイルが生成されます。

- `Makefile` (他のプラットフォームのMakefilesを含めます)

- `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`ファイルは、生成された接続の効果を修正するユーザ・セグメントを 含んでいます。ユーザ・コードは、自動生成されたコードの実行前と後に追加されます。

さらに、各ファイルの始まりには、カスタム・ヘッダまたは著作権表示を追加するのに 使用できるユーザ・セグメントがあります。