|
ステップ 2 - Makeログから展開する解析方法[makeログから抽出] において、Imagix 4Dはビルドシステムがソースコードをコンパイルする際に実行されるコマンドライン呼び出しのログから情報を取得します。コンパイラへのコマンドのサブセット、特にソースファイルの名前とそれに関連する -I、-D、および -U の引数は、Imagix 4Dのソースアナライザによってコードを解析するために使用されます。 Imagix 4Dには、Microsoft Visual StudioおよびMicrosoft Buildツールと連携するための専門的なサポートがいくつか組み込まれています。このサポートに特有の手順は、以下でMSBuildフラグで示されています。 このようなログファイルを作成するにあたり、以下、2種類の方法が用意されています。 コマンド・キャプチャ: ビルドプロセスの一部として直接ログファイルを生成することができるかもしれません。例えば、makeシステムを実行する際に、それがエコーするコマンドをログファイルにリダイレクトすることができます。または、コンパイラを冗長モードで実行し、エコーされたコンパイラコマンドをログファイルにキャプチャするように設定することもできます。一部のビルドシステムは、例えば JSON Compilation Database のように、コンパイルのディレクティブを記録する自動的な仕組みを提供しています。 コンパイラ・モニタ: あるいは、Imagix 4Dのimagix-cc-monitorユーティリティを使用して、コンパイラの呼び出しを記録することができます。このユーティリティはシステムレベルのプロセスを監視します。ソースコードと共に使用しているコンパイラをユーティリティに識別させることで、すべてのコンパイラ呼び出しを認識し、ログファイルにキャプチャすることができます。詳細については、imagix-cc-monitorの実行を参照してください。 [makeログから抽出] の設定を適切に構成し、ビルドログを正常に処理すると、処理結果が保存され、Imagix 4Dに対してこれらの抽出結果を使用してソースコードを解析するよう指示できます。2a. コンパイラコマンドを含むログファイルを生成する注意: このステップ2aは、コマンドキャプチャの代替手法を使用する場合に適用されます。コンパイラモニタの代替手法については、imagix-cc-monitorユーティリティの実行に関する詳細が記載された付録Cを参照してください。結果のログファイルにはすべての必要なデータが含まれます。 MSBuild: コードをビルドする際に必要なmakelogを生成する詳細な手順については、Microsoft Buildログファイルを参照してください。結果のログファイルにはすべての必要なデータが含まれます。 [makeログから抽出] のアプローチでは、ソースコードのコンパイル中にビルドシステムが実行するコマンドが記録されたログファイルが必要です。これらのコマンドの中で最も重要なものは、コンパイラに対して実行されるものです。また、ディレクトリの変更を引き起こすコマンドも必要です。これにより、コンパイラに渡された相対パスから正確な絶対パスが計算できます。 このようなログファイルを作成するための具体的なプロセスは、ビルド環境によって大きく異なります。一部のビルド環境では、JSON Compilation DatabaseやNinjaビルドログの特定の形式など、特定のビルドレコードを明示的に作成します。[makeログから抽出] には、これらに対処するフィルタがあります。 それ以外の場合、コンパイルコマンドをキャプチャする具体的な手法が大きく異なるため、ここでは理論のみが提示されます。makeが実行されると、ビルドに必要な各コマンドラインが標準出力にエコーされ、それが実行されます。ログファイルを生成するための一般的なアプローチは、コードをコンパイルするmakeを呼び出し、エコーされたコマンドをファイルにキャプチャまたはリダイレクトすることです。現在、makeを -silent または -quiet タイプのオプションで実行している場合は、それらを無効にしてmakeコマンドがエコーされ、ログに記録できるようにする必要があります。ビルドシステムが実行しているコマンドをエコーするようにするために追加のオプションが必要な場合があります。 ログファイルの作成が完了した時点で、Imagix 4D のコード解析に必須となる要素がすべて、ログファイルに格納されていることを確認してください。ログファイルには、コンパイル対象のソースファイルを、すべて指定する必要があります。各コンパイル・コマンドが使用する、インクルード・ディレクトリおよびマクロ定義も明示しなければなりません。 ビルドログのコンパイルコマンドに必要な基本要素の簡略版を以下に示します。
2b. 新しいデータソースの追加を指定[データソース] ダイアログ ([プロジェクト] > [データソース]) を開きます。既存のデータソースの設定を変更するのではなく、新しいデータソースをプロジェクトに追加したい場合は、ダイアログの左側にあるデータソースセレクタの下で [+ データソースを追加] を選択します。2c. ビルドログからの抽出アプローチを選択ステップ2の残りの部分では、[データソース] ダイアログの右側で作業します。上部で、[データソースの種類を選択] とラベル付けされたメニューボタンで [C/C++ソースファイル][makeベース][makeログから抽出] から選択します。 MSBuildの場合: 代わりに [C/C++ソースファイル][Microsoft Visual Studio][MSBuildログ] から選択します。2d. ログファイルの名前と開始ディレクトリを指定[Makeログ] タブの [Makeログファイル] フィールドに、ログファイルのフルパス/ファイル名を入力します。 Makeログを処理する際、Imagix 4Dはこれらのパスがどのディレクトリに対して相対的であるかを知る必要があります。システムによって最初にMakeログが生成されたとき、パスは通常、Makeログの元の場所を基準にしています。ただし、そうでない場合や、Makeログを移動させた可能性があります。したがって、[開始ディレクトリ] フィールドを使用して相対パス名の初期ディレクトリを指定できます。 MSBuildの場合: Microsoftソリューション内の各プロジェクトに対してログファイルを指定する必要があります。これらのログファイルは通常、同じディレクトリに書き込まれます。これらのログファイルを簡単に指定できるようにするために、ディレクトリとログファイル自体を指定するための別々のフィールドがあります。[ログファイル] フィールドでは、複数のファイル名を入力し、ファイル名のグロブスタイルの一致に * 文字を使用できます。2e. 追加のコンパイラ・オプションとソースアナライザ・オプションの指定通常、[オプション] フィールドは空欄のままにします。ログファイルに記述される -I、-D、-U のコンパイラ・オプションは、すべて自動的に抽出されます。ただし、Imagix 4D でソースコードの解析時に求められるコンパイラ・オプションの一部が、ログファイルに記されていない場合には、ここでそれらのオプションを追記することが可能です。また、適用が必要な Imagix 4D ソースアナライザ・オプションも、追加できます(詳細は「アナライザの構文とオプション」のページを参照)。2f. コンパイラ設定ファイルの選択[コンパイラおよびターゲット] コンボ・ボックスにおいて、ステップ 1 でセットアップしたコンパイラ設定ファイルを選択します。ソフトウェアのコンパイラおよびターゲット・プラットフォーム用のコンパイラ設定ファイルを作成していない場合は、ここでその作業を行うことを強くお奨めします。 ステップ2gでは、複数のコンパイラのためのコンパイラディレクティブを抽出できることがわかります。複数のコンパイラを指定する場合、指定する名前がgccとg++のように同じコンパイラの異なる名前である可能性があります。この場合、1つのコンパイラ設定ファイルで読み込んでいるすべてのソースファイルをサポートできます。複数のコンパイラを指定していないか、もしくは指定しているコンパイラが同等で同じコンパイラ設定ファイルでサポートされている場合、この時点でステップ2fは完了しています。 ただし、お使いのソフトウェアビルドには複数の異なるコンパイラが組み込まれている可能性があり、したがって、ビルド内の異なるソースファイルに対しては異なるコンパイラ設定ファイルが適しているかもしれません。これに対処する方法は2つあります。 1つめの方法は、複数の [makeログから抽出] データソースを追加することです。各データソースについて、同じログファイルを使用し、異なるコンパイラとその適切なコンパイラ設定ファイルを指定します。その結果、プロジェクトは指定した各コンパイラ/データソースによってコンパイルされたすべてのソースファイルを対象とします。 2つめのアプローチは、#includeディレクティブを使用して適切な基本となる設定ファイルにリダイレクトする、マルチコンパイラ構成ファイルを作成することです。ログファイルを処理する際、Makeログデータからの抽出プロセスは、特定のソースファイルをコンパイルする際に使用された -D フラグを記録します。複数のコンパイラが指定されている場合、Makeログデータからの抽出プロセスはまた、そのソースファイルに使用されたコンパイラを示す追加の -D フラグも生成します。定義されるマクロは __IMGXCOMPILER_compiler_id の形式を取り、compiler_id は [コンパイラコマンド] フィールドで指定された特定のコンパイラの名前に基づいています。compiler_id 文字列は、コンパイラの名前の先頭を小文字にし、コンパイラの名前に含まれる非英数字文字をアンダースコア (_)に置き換えることで生成されます。 これらの -D フラグを使用して、マルチコンパイラのシンプルな構成ファイルを定義できます。以下の例は、GNU g++/gcc および Microsoft cl コンパイラの両方を使用するソフトウェアビルドをサポートするために作成できる、新しいコンパイラ構成ファイルの全内容を示しています。作成され、ここで指定された .inc ファイル(ステップ1を参照)は、少ない行で構成され、コンパイラ固有の .inc ファイルにリダイレクトされます。
2g. 処理ルールのレビューと修正[処理ルール] タブには、ログファイルの解析方法と情報の抽出方法を制御する、一連のルールが表示されます。ルールをログファイルと突き合わせて見直すことにより、ログファイルのフォーマットに適合するルール設定を指定することができます。 MSBuildの場合: [処理ルール] タブの設定のほとんどは自動的に設定され、表示されるのはごく一部です。 これは反復プロセスの始まりであることに注意してください。ステップ2iでは、これらのルールを使用してログファイルを処理した結果を確認し、その後、ルールを改良するためにこのステップに戻ります。満足のいく結果が得られるまで、これを繰り返すことができます。 [処理ルール] タブは、さまざまなセクションに分割されています。
2h. ログファイルの処理以上により、ログファイルを処理する準備が整いました。ダイアログの下部にある [Makeログを処理] をクリックしてください。2i. ログファイルの出力結果のレビューと処理ルールの改善Imagix 4D には、ログファイルの処理結果のレビューに使用するフィードバック用のソースが、いくつか用意されています。
ソースファイルの特定まず始めに、ログファイルで参照されるソースファイルを特定することに焦点を置きます。 ソースファイルが見つからない場合は、[コンパイラ] ログを参照してください。このログには、コンパイラの起動コマンドとして認識された、ログファイルの各行が示されています。それでもコンパイラの起動コマンドが見つからない場合は、ログファイルを調べてください。ここで手動によりコンパイラの起動コマンドを特定できない場合は、ログファイルの再生成が必要となることがあります(ステップ 2a を参照)。コンパイラの起動行が存在するものの、[コンパイラ] ログに従いその行が特定されていない際は、[コンパイラの呼出し] ルールをチェックしてください。指定したコンパイラ・コマンドが、ログファイルに出力されたコマンドと一致していることを確認します。また、[行頭の無視すべきコマンド] ルールの修正が必要となることもあります。 しかしながら、コンパイラの起動コマンドが検出されたのにもかかわらず、まだソースファイルが見つからない場合には、「ソースファイルの接尾語」ルールと起動コマンドの拡張子を比較してください。コンパイラ・オプションの識別ソースファイルの特定が適切になされた上で、コンパイラ・オプションの抽出箇所をレビューします。 この際 [コンパイラの詳細] ログを調べることが、特に効果的な方法と言えます。ログファイルの実際の行を、そこから派生したオプションと比較することが可能です。オプションが不足していたり、オプションのフォーマットが希望するものと異なったりする場合には、[コンパイラオプション] ルールを修正してください。 また、[警告] ログも、有効に活用できることがあります。コンパイラ行に「unrecognized arg」のリストが表示されている場合、オプションのフォーマットを変更する必要があるか、一部のオプションが [引数を取るコンパイラオプション] ルールに登録されていない可能性があります。パスの調整最後の手順として、パスをレビューし解決します。 ソースファイルの名前と、それに関連付けられた -I、-D、-U オプションを特定する以外に、抽出処理ではディレクトリ先が追跡されるため、ソースファイルとインクルード・ディレクトリの双方に対する相対パスを解決することが可能です。Compiler Monitor を使用しているケースでは、ディレクトリの場所は自動的に記録されますが、[コマンド・キャプチャ] を適用している場合には、[ログファイルの処理] セクションの設定を、変更する必要が生じることがあります。 CD ログからは、今後の相対ディレクトリの計算に使用されるベースを変更するものとして特定された、ログファイルの行を把握することができます。cd を呼び出す行が存在しない場合には、[ディレクトリ変更コマンド] ルールを確認してください。cd の呼び出し行に相対パスが含まれている時は、適切なパスを割り出すため [相対パス付きのディレクトリ変更コマンドを処理] ルールを選択します。 Summary of build ログの処理において、ファイルシステムでの検出を差し置き、他のソースファイルを特定中であることを未だに示す際は [警告] ログを参照し、ファイルシステム内で検出できないファイルを特定します。次に、検出できない原因が、実際にファイルが存在しないのか、あるいは処理中にファイルパスが適切に解決されなかったのかを、判断する必要があります。後者の場合は、[ディレクトリ変更] ルールを修正してください。 両方の代替案に関する最後の注意点として、パスについて述べます。Imagix 4Dによる解析のためのソースコードが、ログファイルを生成した時点とは異なる場所にある可能性があります。これは、解析に使用するプラットフォームがコンパイルに使用するプラットフォームと異なる場合など、さまざまな理由で発生する可能性があります。ログファイルに絶対パスではなく相対パスが含まれている場合、ステップ2dで異なる開始ディレクトリを指定することで成功する可能性があります。また、ログファイルに絶対パスが含まれている場合、[ファイル] > [オプション] ダイアログの [データ収集] セクションで [ディレクトリマッピング] 設定を使用してパスの置換を行うことができます。2j. 解析プロセスの開始ログファイルの出力結果のレビューとルールの修正は、反復的な処理となります。ルールを修正し(ステップ 2g)ログファイルを処理(ステップ 2h)するたびに、レビューを実施するため新しい出力結果を生成します。最初のうちは、レビューにより再度ルールの改善と、ログファイルの(再)処理の必要性を決定づける、十分な根拠が提示されます。 ある時点で、処理ルールが十分に改善されていると判断し、出力結果となるダイアログ・ベースの(C / C++)データソース定義によって、どの程度適切にソースコードが解析されるのかを確認する必要が生じることがあります。これは何度でも実行できるステップです。後で 2g あるいは 2a に戻り、ステップ 2 固有の繰り返し処理を継続することが可能です。 コードを解析するために生成された [ダイアログベース (C/C++)] データソース定義を適用する準備ができたら、ダイアログの下部にある [データソースを読み込み] クリックします。
|