リンク可能な複数のエンティティをもつプロジェクト

Perforce QACは、プロジェクトが実行可能または、ライブラリなどの1つのリンク可能なエンティティをもつという考えのもとにデザインされています。

複数のリンク可能なエンティティは例えば本当は関数は各エンティティに対し一度のみ定義されているにも関わらず、複数の定義をされた関数のレポートするなど不正確な解析結果を引き起こす原因となり得ます。

原則的には、プロジェクトは 1エンティティに対し1つ生成されます。大きなプロジェクトを複数のPerforce QACプロジェクトに分割する際の手助けとしてスクリプトが用意されています。

スクリプトは、ビルドコマンドまたは、JSONコンパイルデータベースの必要な通常のプロジェクト同期と同様、CCTを生成しPerforce QAC へのファイルのリストを同期します。 違いは、Perforce QACプロジェクトを生成し、どのソースファイルがプロジェクトに加えられるべきかを識別する点です。

スクリプトは scripts フォルダのインストレーションフォルダ内にあります。Linuxでは、スクリプトは multi_project.sh で、Windowsでは、multi_project.bat です。

スクリプトでフラグ --help を実行すると、すべての利用可能なオプションが表示されます。

デフォルトで、いくつかのテンポラリフォルダがカレントフォルダに生成され、プロジェクトは mp_ の接頭辞がついてカレントフォルダの下に位置するフォルダに生成されます。

カレントフォルダに qainject.out ファイルが残され、各プロジェクトフォルダのJSONコンパイルデータベースファイルがここに保持されます。これらのファイルは必要とされませんが、デバッグのために保持されます。


シンプルなマルチプロジェクト例

非常にシンプルなビルドスクリプトを以下に示します。

g++ -c util.cpp
ar rv libutil.a util.o
g++ foo.cpp libutil.a -o foo
g++ bar.cpp libutil.a -o bar 

スクリプトは2つの実行可能ファイルとそれによりリンクされている1つのライブラリをコンパイルします。

Linuxでスクリプトは以下のように呼出されます。

<install folder>/scripts/multi_project.sh <build script> 

Windowsでは以下のように呼出されます。

<install folder>\scripts\multi_project.bat <build script> 

スクリプトは以下の3つのプロジェクトを生成します。

  • mp_foo
  • mp_bar
  • mp_libutil

各プロジェクトは関連する1つのソースファイルを含みます。

同じPerforce QACプロジェクトが各実行可能ファイルと共にライブラリソースが含むとより使いやすいでしょう。 これはライブラリソースが複数回解析されることになりますが、より正確な結果を生成する可能性があります。

ライブラリソースと実行可能ファイルを結合するには、--executables-only  フラグを加えます。

これにより、mp_foo および、 mp_bar プロジェクトのみが生成されソースファイル util.cpp がそれぞれに追加されます。


フォルダストラクチャをもつシンプルなマルチプロジェクト例

上記のプロジェクトのフォルダストラクチャは以下のようになります。

src/foo.cpp
src/bar.cpp
src/util.cpp
build/dobuild.sh
mp_projects/
mp_working/ 

ビルドスクリプトの 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 はサポートされていません。