Gtest: неопределенные ссылки

Я пытаюсь использовать GoogleTest для проверки простой функции, но при запуске make в моей папке сборки компилятор выкидывает Undefined Reference сообщения об ошибках у меня. Я ссылался на файл заголовка gtest, поэтому не уверен, что не так. Есть идеи? Я новичок во всем, как в Unix, так и в модульном тестировании, поэтому я вполне мог упустить что-то простое. Заранее спасибо!

Сообщения об ошибках:

CMakeFiles/Proj2.dir/main.cpp.o: In function `main':
main.cpp:(.text+0x1e): undefined reference to `testing::InitGoogleTest(int*, char**)'
main.cpp:(.text+0x23): undefined reference to `testing::UnitTest::GetInstance()'
main.cpp:(.text+0x2b): undefined reference to `testing::UnitTest::Run()'
collect2: error: ld returned 1 exit status

main.cpp

#include "gtest/gtest.h"
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

test.cpp

#include "gtest/gtest.h"#include "Testable.h"
TEST(GetTwoTest, Two) {
EXPECT_EQ(2, GetTwo());
}

Testable.cpp

#include "Testable.h"
int GetTwo() {
return 3;
}

Вот мой файл CMakeLists.txt:

cmake_minimum_required(VERSION 2.6)

SET(CMAKE_CXX_FLAGS "-std=gnu++11") #Turn on C++11 Support

set(FILES_TO_TEST Testable.cpp)
set(UNIT_TESTS Test.cpp)
set(MAIN_FILE main.cpp)

add_subdirectory(gtest) #Build all the gtest stuff
include_directories(gtest/include)
include_directories(.)
add_library(codeToTest ${FILES_TO_TEST})

add_executable(Proj2 ${MAIN_FILE})
target_link_libraries(Proj2 codeToTest)

add_executable(unit-test ${UNIT_TESTS})
target_link_libraries(unit-test gtest gtest_main rt pthread codeToTest)

13

Решение

Ваша настройка выглядит почти правильно. Тем не менее, вам нужно иметь 2 отдельных main функции; один для реального исполняемого файла Proj2 и еще один с gtest включает в себя и функции для тестового исполняемого файла unit-test,

Вы можете сделать это, имея 2 разных файла main.cpp, скажем main.cpp и test_main.cpp. Показанный вами файл будет test_main.cpp и будет включен в add_executable(unit-test ... команда.

Ваш новый main.cpp не будет содержать ссылок на gtest, включая или функции.

8

Другие решения

Из ошибок компоновщика очевидно, что вы не связали библиотеку gtest с вашей тестовой программой.

Увидеть грунтовка:

Чтобы написать тестовую программу с использованием Google Test, вам нужно скомпилировать Google Test в библиотеку и связать с ней свой тест. …

Просто посмотрите этот документ для получения подробной информации о вашем компиляторе и системе.

4

По вопросам рекламы [email protected]