我想在我的项目中使用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:In 函数
_start': (.text+0x20): undefined reference to
main' 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();*/
}
这里有什么问题?
答案 0 :(得分:25)
添加
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
答案 1 :(得分:5)
您需要使用-lboost_unit_test_framework进行编译,如果您使用BOOST_TEST_DYN_LINK
,boost会为您生成main,因此您需要告诉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()
答案 2 :(得分:2)
尝试移动
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN
在你的包含之前 - 它对我有用。
答案 3 :(得分:0)
有一次我做了一个愚蠢的错字并得到了这个。编译器被骗了。
就像“#define BOOTS_TEST_MODULE DUMMY”一样。是的,我喜欢靴子:)