このセクションの内容
はじめに
GNU Make またはそれに似たビルド ツールをベースにしたプロジェクトと C/C++test を統合するには、通常、ビルド スクリプトを変更する必要があります。多くの場合、コンパイルおよびリンク ルールによって呼び出されるコマンド ラインを変更します。それには、make 変数または一部のケースではコンパイルおよびリンク ルール定義を変更する必要がある場合があります。
Make コンパイル ルールとの統合
Make コンパイル ルールと統合するには、コンパイラ コマンド ラインの先頭に cpptestcc
コマンド ラッパーを付加します。何が最良の方法かを判断するには、まずビルド スクリプトを解析し、コンパイル ルールの定義を見つけます。一部のケースでは、C または C++ のファイルを処理するルールなど、特定のファイルに対応する複数のルールがある場合があります。次のサンプルは、コンパイル ルール定義の一例を表しています。
$(PRODUCT_OBJ_ROOT)/%$(EXT_OBJ) : %$(EXT_CXX) $(CXX) $(CXXFLAGS) $(CXXSTATICFLAGS) -DAPPNAME=product
このサンプルでは、CXX make 変数を使用してコンパイラを参照しています。この場合、次の 2 つの選択肢があります。
- コンパイル ルールに接頭辞変数を追加する
- コンパイラ変数を上書きする
以降のセクションでは、上の 2 つを行う方法について説明します。
コンパイル ルールへの接頭辞変数の追加
コンパイル ルールの先頭に追加の変数を付加したコンパイラを参照する変数を付加します。
$(PRODUCT_OBJ_ROOT)/%$(EXT_OBJ) : %$(EXT_CXX) $(COV_TOOL) $(CXX) $(CXXFLAGS) $(CXXSTATICFLAGS) - DAPPNAME=product
さらに、Make を呼び出すとき (例 a) またはビルド スクリプト内で (例 b) 追加された変数 (COV_TOOL) に値を代入します。
例 a
make COV_TOOL="cpptestcc -compiler gcc_9-64 -line-coverage -workspace /home/test/proj/cov -- "
例 b
この場合、追加の変数に依存する条件文の中に変数を置くことが多いでしょう。
ifeq (COV_BUILD,$(BUILD_TYPE)) COV_TOOL="cpptestcc -compiler gcc_9-64 -line-coverage -workspace /home/test/proj/cov -- " endif
コンパイラ変数の上書き
この方法では、コンパイラ変数を使用してカバレッジ ツール コマンド ラインを指定します。それには、Make を呼び出すとき (例 c) またはビルド スクリプト内で (例 d) CXX
変数のオリジナルの値の後に指定します (これは、オリジナルのコンパイラでカバレッジ ツール コマンド ラインを上書きするのを防ぐためです)。
例 c
ビルド スクリプトに複数のファイル タイプに対応する複数のコンパイル ルールがある場合、CC
と CXX
など、複数の変数を上書きする必要があるケースがあります。
make CXX="cpptestcc -compiler gcc_9-64 -line-coverage -workspace /home/test/proj/cov -- g++"
例 d
この場合、追加の変数に依存する条件文の中に変数を置くことが多いでしょう。
ifeq (COV_BUILD,$(BUILD_TYPE)) CXX="cpptestcc -compiler gcc_9-64 -line-coverage -workspace /home/test/proj/cov -- g++" endif
Make リンク ルールとの統合
リンク ルールを変更して、コードのインストゥルメントに必要な追加のライブラリをインクルードします。cpptestcc
ツールのライブラリは、特定のプロジェクト要件に応じて異なる形式をとることができます。可能な形式は、共有/動的ライブラリ、静的ライブラリ、またはオブジェクト ファイルです。いずれの場合も、リンカー オプションは形式が異なることがありますが、Make ファイルの変更はいずれも非常によく似た方法で行うことができます。
このセクションでは、Make ベースの環境でリンカー コマンド ラインを変更する一般的な方法だけを説明します。各形式における、cpptestcc
ツール ライブラリの使用方法について、詳しくは「複雑なプロジェクトへのカバレッジ ツールの適用」を参照してください。
変更する適切な個所を見つけるには、まずビルド スクリプトを解析してリンク ルールの定義を見つけます。次のサンプルは、リンク ルール定義の一例を表しています。
$(PROJ_EXECUTABLE): $(PRODUCT_OBJ) $(LXX) $(PRODUCT_OBJ) $(OFLAG_EXE)$(PROJ_EXECUTABLE) $(LXXFLAGS) $(SYSLIB) $(EXECUTABLE_LIB_LXX_OPTS)
cpptestcc
ツール ライブラリを表す専用の変数を追加するか、リンク ルールですでに使用されている変数のいずれかにカバレッジ ライブラリを付加することができます。
カバレッジ ツール ライブラリを表す変数の追加
次のサンプルは、変更後のルールを表しています。
$(PROJ_EXECUTABLE): $(PRODUCT_OBJ) $(LXX) $(PRODUCT_OBJ) $(OFLAG_EXE)$(PROJ_EXECUTABLE) $(LXXFLAGS) $(SYSLIB) $(EXECUTABLE_LIB_LXX_OPTS) $(COV_LIB)
さらに、Make を呼び出すとき (例 e) またはビルド スクリプト内 (例 f) で追加された変数 (COV_LIB
) に値を代入します。
例 e
make COV_LIB="<COV_TOOL_INSTALLATION>/runtime/lib/cpptest.a "
例 f
この場合、追加の変数に依存する条件文の中に変数を置くことが多いでしょう。
ifeq (COV_BUILD,$(BUILD_TYPE)) COV_LIB="<COV_TOOL_INSTALLATION>/runtime/lib/cpptest.a" endif
リンク ルールの既存の変数にカバレッジ ライブラリを追加
ifeq (COV_BUILD,$(BUILD_TYPE)) LXXFLAGS+="<COV_TOOL_INSTALLATION>/bin/engine/lib/cpptest.a" endif