|
ステップ 3b - マクロ定義の解決定義済みのマクロや未定義のマクロを組み合わせた #ifdef 形式のプリプロセッサ・ディレクティブを使用する条件付きコンパイルでは、ソースコードの同じベースセットを実行ファイル群に組み込むことが可能です。この方法を採用する場合、マクロ定義や未定義のマクロは通常、コンパイラ・コマンドラインの一部として -D (定義) および -U (未定義)の オプションを渡すことによって、生成されます。また、これらのオプションは、Makefile または IDE で指定します。 プロジェクトへソースコードをロードすると、Imagix 4D ソースアナライザは同一の #ifdef 形式のディレクティブに続いて、完全な意味解析を実行します。したがって条件付きコンパイルのために、通常コンパイラに渡される -D ならびに -U オプションを、 Imagix 4D のプロジェクト設定にも指定することが重要です。 オプションを指定しない場合、単純にプロジェクトへ不正確なコードを組み込むケースから、解析中における重要なシンボル定義の省略あるいは誤って使用するなどのケースまで、多岐にわたる数々の問題が生じることがあります。通常は、この後者のタイプにおける問題によって、ソース解析で警告およびエラーメッセージが生成されます。以下のコードを例として取りあげます。[解析結果] ウィンドウでは、不明なシンボルに関するアナライザの警告が生成される可能性があります。
Imagix 4D プロジェクトを生成する際、この型に関する問題が発生した場合に、そのプロジェクトを確認し修正する手順は、コードをローディングする方法により異なります。 ダイアログ・ベースの解析方法ダイアログ・ベースの解析方法では、[プロジェクト] > [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに -D および -U オプションを、すべて手動で定義します。コードのコンパイルに使用する -D ならびに -U オプションの使用にまだ不慣れな場合は、ソフトウェアのビルドに使用した Makefile または IDE 設定を見直すことで、そこに指定されている -D や -U オプションの使用方法を確認できます。必要となるオプションのリストを探し出す作業は、特定のオプションを個々に特定し解決することに比べ、非常に簡単です。 [Makeログ]、IDE 設定、経験が豊富な同僚などに確認の上、必要な数だけ -D ならびに -U オプションを指定したのち、それ以外のオプションを特定するため上述の説明に倣います。[プロジェクト] > [データソース] ダイアログの [ソースファイル] タブにある [PPフラグ] フィールドに、これらの -D および -U オプションを手動で追加することにより、その他のオプションを組込むことが可能です。Makeログから展開する解析方法Makeログから展開する解析方法では、設定した [Makeログ] 処理のルールに従い、ログファイルにある -D および -U オプションから、マクロ定義設定が生成されます。マクロ定義が不明であることを示す出力が表示された場合には、まず [プロジェクト] > [データソース] ダイアログで [makeログから抽出] データソースを選択します。これは、ダイアログの左にリスト表示される最初のデータソースが該当します。その後、ダイアログの [処理ルール] タブに加えた設定を確認してください。 設定に間違いがない場合は、必須となる -D ならびに -U オプションを手動で追加することが可能です。まず Makelog タブを表示し、[オプション] エントリフィールドに必要な -Dmacro や -Umacro を入力します。そして、[Makeログを処理] ボタンをクリックしてください。これにより入力した -D、-U オプションは、作成される個々のダイアログ・ベース(C / C++)のデータソースすべてに伝播されます。Microsoft Visual Studio ベースの解析方法Microsoft Visual Studio ベースの解析方法では、Visual Studio の .sln および .vcproj プロジェクト・ファイルから自動的にマクロ定義設定が生成されます。 最初に [プロジェクト] > [データソース] ダイアログの [プロジェクト] タブあるいは [ソリューション] タブに、Visual Studio の設定と [構成] が正確に設定されていることを確認してください。それでもマクロ定義を解決できない場合は、タブの [オプション] エントリフィールドに、必要な -D ならびに -U オプションを追加します。これらは、Visual Studio プロジェクト・ファイルから展開されるものを補完します。
|