autotools で make check を実装する方法(その2)

前回のエントリの続きです

make check で

  • 必要なプログラム・ライブラリのビルド
  • テストケースの実行

を自動で行う方法をまとめます.

autotoolsの使い方,make checkに関する基本的な情報は前回のエントリにまとめているので,本エントリは差分だけをまとめます

Makefile.am の記述

test_X.c から test_X をビルドして,test_X をテストケースとして利用する場合は,Makefile.am に以下の3行を加えます

check_PROGRAMS = test_X
test_X_SOURCES = test_X.c
TESTS = $(check_PROGRAMS)

テストケースが複数ある場合は,次のように記載できます

check_PROGRAMS = test_X
check_PROGRAMS += test_Y

# test_X に関する設定
test_X_SOURCES = test_X.c

# test_Y に関する設定
test_Y_SOURCES = test_Y.c

TESTS = $(check_PROGRAMS)

必要な記述はこれだけです.あとは通常の Makefile.am と同様に調整するだけでテスト管理ができるようになっています.

補足情報(Makefile.amの書き方について)

蛇足になりますが,Makefile.am でよく使う記述をメモしておきます.


例えば特定のプログラムだけ,コンパイルオプション(CFLAGS)を変更したい場合は

test_X_CFLAGS += "-O3" 

などとします

同様に,特定のプログラムだけリンカのオプションを変える場合は

test_X_LDFLAGS += "-L/usr/local/lib" 
test_X_LDADD += "-lm" 

などとします

すべてのテストプログラムについて,CFLAGSを設定したい場合は

CFLAGS += -I../path/to

などと書く方法もあります.

補足事項(テストケースの並列起動など)

autotools はもはや「枯れた技術」です.新鮮味はありませんが,すでにツールとして完成されています.

たとえば上記の Makefile.am の記述だけで

  • make check を実行しないかぎり, check_PROGRAMS で指定したプログラムはビルドされない
  • make install を実行しても check_PROGRAMS などはインストールされない
  • make check -j10 などとすると,テストケースを並列実行できる.

などなど細かいところの挙動が調整されていて,使い勝手がよくなっています.

次回のエントリでは valgrind を使ってメモリリークのチェックを自動で行う make check の書き方を紹介します