20

Boost testプロジェクトで使用したい。

私はプロジェクトでcmakeを使用しているので、それCMakeList.txtをラップするための簡単なものを書きました。

find_package (Boost COMPONENTS unit_test_framework REQUIRED)
file(GLOB_RECURSE UnitTests_sources tests/*.cpp)
add_executable(UnitTests
    ${UnitTests_sources}
)
enable_testing()
ADD_TEST (UnitTests UnitTests)

したがって、cmakeはここで正常に機能します。コンパイル中に問題が発生します。

CXX実行可能ファイルのリンク../../bin/UnitTests

/usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/../../../../lib/crt1.o:関数_start': (.text+0x20): undefined reference tomain'collect2:ldが1つの終了ステータスを返しました

テストフォルダ(LogManagerTest.cpp)にある唯一のファイルは次のとおりです。

#include "Utils/LogManager.hpp"
#include <boost/test/unit_test.hpp>

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN

#define BOOST_TEST_MODULE LogManager

BOOST_AUTO_TEST_CASE(LogManagerCase)
{
    BOOST_REQUIRE(true);
    /*LogManager manager;
    manager.Initialize();
    manager.Deinitialize();*/
}

ここで何が問題になっていますか?

4

4 に答える 4

29

追加

ADD_DEFINITIONS(-DBOOST_TEST_DYN_LINK) 

CMakeLists.txtに追加して、main()を自動的に生成します。また、

#define BOOST_TEST_MODULE xxx

unit_test.hppを含める前に定義する必要があります。

詳細とオプションについては、 http ://www.boost.org/doc/libs/1_47_0/libs/test/doc/html/utf/compilation.htmlを参照してください。

于 2011-10-15T23:34:04.287 に答える
8

-lboost_unit_test_frameworkを使用してコンパイルする必要があります。使用する場合、boostはメインを生成するBOOST_TEST_DYN_LINKため、makefileにそのメインを探すように指示する必要があります。次に、以下を使用してコンパイルできます。

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE LogManager                                   
BOOST_AUTO_TEST_CASE(LogManagerCase)                                   
{                                                                      
    BOOST_REQUIRE(true);                                               
    /*LogManager manager;                                              
    manager.Initialize();                                              
    manager.Deinitialize();*/                                          
}                                                                      
BOOST_AUTO_TEST_SUITE_END()    
于 2011-10-15T23:35:17.053 に答える
4

移動してみてください

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN

あなたのインクルードの前に-それは私のために働いた。

于 2013-08-22T13:06:01.320 に答える
0

一度私は愚かなタイプミスをして、これも手に入れました。そしてコンパイラはだまされました。

「#defineBOOTS_TEST_MODULEDUMMY」と同じです。はい、私はブーツが好きです:)

于 2013-11-11T11:50:33.757 に答える