BOOST TEST - 複数ファイルで静的ライブラリを利用 ― 2020年05月12日 11時54分44秒
The static library variant にはライブラリの説明が書いてある。boost_unit_test_framework ライブラリをリンクする場合には少し特別な形式でファイルを準備する必要がある。一つのファイルのみ BOOST_TEST_MODULE を定義する。これは静的ライブラリを利用するにも、動的ライブラリを利用する場合にも当てはまる。
静的ライブラリの方が準備されている main 関数を使えるので下準備は少なく、簡単ではある。しかし、動的 boost_unit_test_framework がリンクされてしまうのを防ぐために、-static リンクオプションが必要になる。そのため、他のライブラリをリンクしようとすると面倒な事に陥る事もあるようだ。そのため、下準備にちょっと追加で出来る動的ライブラリの方が総合的には使いやすい様だ。
まず、一つ目の特別なファイル。
まずは、少し気を付ける事項から。
// c++ -c -o 1.o -I /usr/local/include/ boost_static_unit_test1.cpp
#define BOOST_TEST_MODULE Verify Std C++
#include <boost/test/unit_test.hpp>
- BOOST_TEST_MODULE を定義する。
- boost/test/included.unit_test.hpp ではなく boost/test/unit_test.hpp を使う。
- それ以外は書かない。
これをコンパイルする。今回は、-c オプションを使ってコンパイルのみにする。
-I はどこに boost ライブラリがインストールされているかに依存する。Linux 系だったら /usr/include 以下で特に必要無いだろう。BSD 系だと /usr/local/include が必要になる。
% c++ -c -o 1.o -I /usr/local/include/ boost_static_unit_test1.c
次に実際にテストケースを書くファイルの説明に移る。まず、一番大切な事。BOOST_TEST_MODULE は絶対に定義しない。それ以外は、単体の時と同じように BOOST TEST CASE を書く。
// c++ -c -o 1.o -I /usr/local/include/ boost_static_unit_test.cpp
// c++ -c -o 2.o -I /usr/local/include/ boost_static_unit_test.cpp
// c++ 1.o 2.o -static -L /usr/local/lib -l boost_unit_test_framework
#include <memory>
#include <boost/test/unit_test.hpp>
// #include <boost/test/included/unit_test.hpp>
BOOST_AUTO_TEST_CASE( test_shard_ptr )
{
int one = 1;
int two = 3;
BOOST_CHECK( one == 1 );
BOOST_CHECK( two == 2 );
BOOST_CHECK_EQUAL( one, 1 );
BOOST_CHECK_EQUAL( two, 2 );
BOOST_REQUIRE( one == 1 );
BOOST_REQUIRE( two == 2 );
// return 0;
}
そして、二つ目のファイルをコンパイルし、リンクする。-I オプションと同様に、-L オプションも環境依存。大概の場合は動的ライブラリと静的ライブラリがインストールされているので -static を指定して、明示的に静的ライブラリを使う。また、静的ライブラリから main 関数を引っ張って来てくれる。
リンク後の実行結果は前回と同じになる。
% c++ -c -o 2.o -I /usr/local/include/ boost_static_unit_test2.cpp
% c++ 1.o 2.o -static -L /usr/local/lib -l boost_unit_test_framework
% ./a.out
Running 1 test case...
boost_static_unit_test2.cpp(15): error: in "test_shard_ptr": check two == 2 has failed
boost_static_unit_test2.cpp(18): error: in "test_shard_ptr": check two == 2 has failed [3 != 2]
boost_static_unit_test2.cpp(21): fatal error: in "test_shard_ptr": critical check two == 2 has failed
*** 3 failures are detected in the test module "Verify Std C++"
最近のコメント