ビルド処理を変更して新しいビルド構成を作成するのが難しい場合は、代わりにビルド仕様ファイルを作成しなければなりないことがあります。
ビルド仕様ファイルは、アプリケーションのビルド方法の詳細をまとめたものです。特に、スタティック・セキュリティー解析を実行するのに必要なステップをまとめ、処理するファイルと使用するコンパイルオプションを指定します。 また、解析結果とライブラリアンの呼び出しを生成するためにリンクしなければならない擬似オブジェクトモジュールも示します。これらは、スタティック・リンク・ライブラリーに擬似オブジェクトモジュールを結合するのに必要です。
インテル® コンパイラーでは、ビルド仕様を作成、実行するユーティリティー・プログラムが提供されています。これらのユーティリティーのいずれかを -help スイッチとともに起動して、使用方法に関するメッセージを表示するか、または -version スイッチでバージョンを識別してください。
ビルド仕様ファイルの作成
ビルド仕様ファイルを作成するには、いくつか方法があります。使いやすい順で次に説明します。
injection ユーティリティーは、ビルドコマンドを子プロセスとして起動し、プロセスの作成を遮断して、ビルド仕様ファイルを生成します。 コンパイラー、ライブラリアン、リンカーの呼び出しがあるごとに、コマンドオプションをキャプチャし、ビルド仕様ファイルに対応するコマンドを追加します。 ユーティリティーは次のように実行します。
inspxe-inject -save-spec <output build spec> -- <build command>
次に例を示します。
inspxe-inject -save-spec buildapp_sca.spec -- make debug
injection ユーティリティーは自動でインテル® C++ コンパイラー、インテル® Fortran コンパイラー、Microsoft Visual C++* コンパイラー、GNU* C++ コンパイラーの 4 つのコンパイラーを認識します。 ビルド・プロシージャーが別のコンピューターでコンパイラー、ライブラリアン、リンカーを起動した場合は、injection ユーティリティーは正しく動作しません。
ビルドプロシージャーでアプリケーションの一部ではないファイルをコンパイルまたはリンクする場合、作成されたビルド仕様ファイルでもこれらのファイルを解析します。 ビルド中に関連していないソースファイルのコンパイルが避けられない場合は、テキストエディターでビルド仕様ファイルを編集して不要なコンパイルステップとリンクステップを排除してください。
ビルドプログラムやコンパイラー、ライブラリアン、リンカーを起動するスクリプトを wrapper ユーティリティーを使用して間接的に変更できます。 wrapper ユーティリティーは、コマンドに対応する単一処理をビルド仕様ファイルに追加します。 その後、(--no-run スイッチが指定されない限り) 指定されたコマンドを実行します。 ビルドプログラムやスクリプトがコンパイラー、ライブラリアン、またはリンカーを起動するすべての場所で、次のようにユーティリティーを実行します。
inspxe-wrap -save-spec <output build spec> [-no-run] -- <command>
次に例を示します。
inspxe-wrap -save-spec buildapp_sca.spec -- icl $(CFLAGS) file1.c
ビルドプロシージャーでアプリケーションの一部ではないファイルをコンパイルまたはリンクする場合、これらの処理はラップしないでください。 ラッピングでこれらの処理をビルド仕様ファイルに含めてしまうことは、望ましくありません。
インストルメント済みのビルドで作成された処理は、ビルド仕様の以前の内容に追加されます。そのため、変更されたビルドを実行する前に、ビルド仕様ファイルの出力を削除しなければなりません。
複数のプロジェクト、複数の構成、共有コードの処理について
1 つのマスター・ビルドスクリプトを使用して、複数のプロジェクトや同一プロジェクトの複数の構成をビルドすることがあるかもしれません。例えば、1 つのビルドスクリプトで、複数のアプリケーションのデバッグおよびリリースバージョンをコンパイルしリンクします。
injection ユーティリティーで (または wrap ユーティリティーによるインストルメンテーション後) このようなビルドスクリプトを実行すると、ビルドされたすべてを実行時にスキャンする 1 つのビルド仕様ファイルが生成されます。これは、1 つのプロジェクトだけをスキャンできないので不便です。また、同一プロジェクトのすべての構成ファイルには通常、同じ問題があるため、同じプログラムの複数の構成ファイルをスキャンすることは役に立たないかもしれません。
マスター・ビルドスクリプトが、1 つのプロジェクトの 1 つの構成のみビルドすることができれば、それを使用して各プロジェクトごとに別々のビルド仕様ファイルを作成すると良いでしょう。これにより、個々のプロジェクトをスキャンすることができます。その後、すべてのプロジェクトをスキャンするスクリプトを記述することができます。
ただし、共通のソースファイルやライブラリーが複数のプロジェクトにビルドされることがあります。このような場合、解析結果に大きな重複が生じます。つまり、共有ファイルにある問題が、それを使用する各プロジェクトに現れることになります。共有ファイルの問題は、一部のプロジェクト・コンテキストで検出され、ほかでは検出されない可能性もあります。この可能性をカバーするために、各プロジェクトの該当するファイルの結果を解析すると良いでしょう。これを行う価値があるかどうかは、開発者自身が決定する必要があります。
1 つのプライマリー・プロジェクトを選択して、共有ファイルの解析結果を調査することもできます。(ライブラリーについては、ライブラリー自身の解析結果を調査するのが良いしょう。) また、プライマリー・プロジェクトの解析結果と別のプロジェクトの調査結果を比較して、共有ファイルで新しい問題が発見されたかどうかを確認することもできます。
ビルド仕様ファイルの使用
ビルド仕様ファイルを作成したら、スタティック・セキュリティー解析の実行に使用できます。ビルド仕様は、プロジェクトからファイルが追加または削除されるごとに、またはコンパイルオプションが変更されたときには必ず更新してください。 更新を怠った場合は、アプリケーション全体のフルの解析が行われません。
ビルド仕様からスタティック・セキュリティー解析を実行するには、次のコマンドライン・ユーティリティーを使用します。
inspxe-runsc -spec-file <build spec> [<options>]
<options> は、コンパイル (およびリンク) ステップに渡される追加オプションを表します。
ビルド仕様ユーティリティー・オプション
オプション | 結果 |
---|---|
-?、-h、-help |
コマンドライン・オプションの説明を表示します。 |
-d-i=id -disable-id=id |
指定した id の警告を無効にします。 |
-e-i=id 、-enable-id=id |
指定した id の警告を有効にします。 |
-l=(1 | 2 | 3)、-level=(1 | 2 | 3) |
スタティック・セキュリティー解析のレベルを指定します (デフォルト = 3)。 |
-l-d=dir、-log-dir=dir |
情報が記録されるディレクトリーを指定します。 |
-no-return-app-exitcode |
結果ではなく、ツールの成功に基づいてリターンコードをセットします (inspxe-inject のデフォルト)。 |
-o-i=file、-option-file=file |
コマンドライン・オプションを含むファイルを指定します。 |
-q、-quiet |
不要なメッセージを表示しないようにします。 |
-r=dir、-result-dir=dir |
解析結果が作成されるディレクトリーを指定します (inspxe-runsc のみ)。 |
-return-app-exitcode |
ツールではなく、操作の成功に基づいてリターンコードをセットします (inspxe-wrap および inspxe-runsc のデフォルト) |
-s-s=file、-save-spec=file |
ビルド仕様を含むファイルを指定します (inspxe-wrap および inspxe-inject のみ)。 wrap ユーティリティーはこのファイルに追加します。injection ユーティリティーはこのファイルを上書きします。 |
-t-d=dir、-tmp-dir=dir |
一時ファイルが作成されるディレクトリーを指定します |
-v、-verbose |
追加情報を出力します。 |
-V、-version |
ユーティリティーのバージョン番号を表示します。 |
ユーザーの使用法によるエラー (無効なコマンドライン・オプションなど) では、リターンコード 1 が返されます。 ツール側のエラーでは、リターンコード 2 が返されます。 さらに、次の規則が適用されます。
inspxe-inject コマンドラインに -return-app-exitcode を追加すると、inspxe-inject ユーティリティーは観測されたビルドコマンドのリターンコードを返します。 これは、ビルドコマンドのリターンコードが、ビルド仕様ファイルで記録された処理が正しく完了したかどうかを示す信頼性の高いものである場合、推奨されます。
オプションが指定されない場合は、デフォルトでレベル 3 スタティック解析を行うオプションが付加されます。
© 1996-2011 Intel Corporation. 無断での引用、転載を禁じます。