Boost test linking - PullRequest
       30

Boost test linking

15 голосов
/ 16 октября 2011

Я хочу использовать 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 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();*/
}

Что здесь не так?

Ответы [ 4 ]

26 голосов
/ 16 октября 2011

Добавить

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

5 голосов
/ 16 октября 2011

Вам нужно скомпилировать с -lboost_unit_test_framework, boost генерирует main для вас, если вы используете BOOST_TEST_DYN_LINK, поэтому вы должны указать make-файлу искать этот 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 голосов
/ 22 августа 2013

Попробуйте переместить

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN

до того, как вы включите - у меня это сработало.

0 голосов
/ 11 ноября 2013

Однажды я сделал глупую опечатку, а также получил это. И компилятор был обманут.

Просто как "#define BOOTS_TEST_MODULE DUMMY". Да, я люблю ботинки :)

...