リンク可能な複数のエンティティをもつプロジェクト
Perforce QACは、プロジェクトが実行可能または、ライブラリなどの1つのリンク可能なエンティティをもつという考えのもとにデザインされています。
複数のリンク可能なエンティティは例えば本当は関数は各エンティティに対し一度のみ定義されているにも関わらず、複数の定義をされた関数のレポートするなど不正確な解析結果を引き起こす原因となり得ます。
原則的には、プロジェクトは 1エンティティに対し1つ生成されます。大きなプロジェクトを複数のPerforce QACプロジェクトに分割する際の手助けとしてスクリプトが用意されています。
スクリプトは、ビルドコマンドまたは、JSONコンパイルデータベースの必要な通常のプロジェクト同期と同様、CCTを生成しPerforce QAC へのファイルのリストを同期します。 違いは、Perforce QACプロジェクトを生成し、どのソースファイルがプロジェクトに加えられるべきかを識別する点です。
スクリプトは scripts フォルダのインストレーションフォルダ内にあります。Linuxでは、スクリプトは multi_project.sh で、Windowsでは、multi_project.bat です。
デフォルトで、いくつかのテンポラリフォルダがカレントフォルダに生成され、プロジェクトは mp_ の接頭辞がついてカレントフォルダの下に位置するフォルダに生成されます。
カレントフォルダに qainject.out ファイルが残され、各プロジェクトフォルダのJSONコンパイルデータベースファイルがここに保持されます。これらのファイルは必要とされませんが、デバッグのために保持されます。
シンプルなマルチプロジェクト例
非常にシンプルなビルドスクリプトを以下に示します。
スクリプトは2つの実行可能ファイルとそれによりリンクされている1つのライブラリをコンパイルします。
Linuxでスクリプトは以下のように呼出されます。
Windowsでは以下のように呼出されます。
スクリプトは以下の3つのプロジェクトを生成します。
- mp_foo
- mp_bar
- mp_libutil
各プロジェクトは関連する1つのソースファイルを含みます。
同じPerforce QACプロジェクトが各実行可能ファイルと共にライブラリソースが含むとより使いやすいでしょう。 これはライブラリソースが複数回解析されることになりますが、より正確な結果を生成する可能性があります。
ライブラリソースと実行可能ファイルを結合するには、--executables-only
フラグを加えます。
これにより、mp_foo
および、 mp_bar
プロジェクトのみが生成されソースファイル util.cpp
がそれぞれに追加されます。
フォルダストラクチャをもつシンプルなマルチプロジェクト例
上記のプロジェクトのフォルダストラクチャは以下のようになります。
ビルドスクリプトの dobuild.sh
は src
フォルダ内のソースファイルを参照し、build
フォルダ(このフォルダは実行時にカレントディレクトリでなければなりません)にバイナリを生成します。
mp_projects
および、 mp_working
も生成される必要がありますが、当初は空です。
このビルドストラクチャで multi_project.sh
スクリプトを使用するためには、build
フォルダから以下のコマンドを実行します。
<install folder>/scripts/multi_project.sh --project-folder ../mp_projects --working-folder ../mp_working --set-source-code-root ../src ./dobuild.sh
このコマンドによりすべてのPerforce QACプロジェクトは mp_projects
フォルダに生成されます。
--set-source-code-root
オプションはPerforce QACプロジェクトファイルで絶対パスが使用されるのを回避するために使用します。
このオプションを使用することで将来プロジェクトの移動が必要な場合に、移動が容易になります。
Renesas
コンパイラの ca850
コンパイラのみがサポートされているという制限があることに留意してください。また、コンパイラによってはリンカは直接起動するのではなくコンパイラにより起動されれると想定されています。 NXPの laxcc はサポートされていません。