CppUTestをインストールせずに利用する方法

CppUTestがver. 3.4になって、automakeによるインストールを行う用に修正された関係で、ver. 3.3以前とは、インストールせずに使う方法が変わっていました。

前提

ここで、CppUTestをシステムにインストールせず利用する、というのは、 libCppUTest.a 及び libCppUTestExt.a を自前でビルドし、 MakefileWorker.mkを利用して、テストプログラムにリンクさせるという方法です。

もしかしたら他にやり方あるのかもしれませんが(automake利用するとか)、浅学にして存じません。何方か知っていたら教えたください。

cpputestライブラリのビルド

Makefile_using_MakefileWorkerというファイルを利用してビルドします。

 $ git://github.com/cpputest/cpputest.git
 $ cd cpputest
 $ make -f Makefile_using_MakefileWorker

CppUMockを利用する場合は、libCppUTestExt.aのビルドが必要です

 $ make -f Makefile_using_MakefileWorker extensions

ver. 3.3以前は、リポジトリルートでmakeすれば良かったのですが、前述のとおり、automakeの関係で、ビルド方法が変わりました。

プロダクトコード&テストコードとのリンク

CppUTesetは、MakefileWorker.mkを使うと簡単にテスト用の実行ファイルを作成することができます。

以下の様な感じでMakefileを記述し、MakefileWorker.mkをインポートしてあげるとビルドから実行までやってくれます。

実際にテストコードを書く方法等は、CppUTestのマニュアルを参照したください。

注意点など

PROJECT_HOME_DIRの注意点

厳密に言うと、SRC_DIRS TEST_SRC_DIRS MOCKS_SRC_DIRS についての注意点です。

Makefileworker.mkを利用すると、ビルド時に、オブジェクトファイルがobjs以下に作成されますが、このとき、実際に生成される場所が

  • objs/$(SRC_DIRS)
  • objs/$(TEST_SRC_DIRS)
  • objs/$(MOCKS_SRC_DIRS)

になります。ここで、PROJECT_HOME_DIR..を指定してしまうと、プロダクトコードのオブジェクトが、例えば objs/../src/hoge.o に展開されてしまいます。

最悪、プロダクトコードと混じってしまうので、.を利用するのが無難でしょう。

プロダクトコードのライブラリはテスト用

Makefileworker.mkを利用すると、プロダクトコードを固めて lib(COMPONENT_NAME).a という静的ライブラリにビルドしてくれますが、これはそのままでは利用できません。

以前書きましたが、CppUTestでは、メモリリークを検出するために、new() delete() 等をマクロを用いて展開しているため、 CppUTestライブラリを利用しないとリンク時エラーになってしまいます。

リリース用のプロダクトコードは、別途makefileを記載する必要があります。

終わりに

もしかして、Makefileworker.mkはもうメンテされていない?