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 会为您生成 main,BOOST_TEST_DYN_LINK因此您需要告诉 makefile 查找该 main。然后您可以使用以下内容进行编译:

#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

有一次我犯了一个愚蠢的错字,也得到了这个。编译器被骗了。

就像“#define BOOTS_TEST_MODULE DUMMY”一样。是的,我喜欢靴子:)

于 2013-11-11T11:50:33.757 回答