Gtest: Undefined Ссылки
Я пытаюсь использовать 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)
Ответы
Ответ 1
Ваша настройка выглядит почти корректно. Однако вам нужно иметь две отдельные функции main
; один для реального исполняемого файла Proj2
, а другой с gtest включает в себя и функции для тестового исполняемого файла unit-test
.
Вы можете сделать это, имея 2 разных файла main.cpp, например main.cpp и test_main.cpp. Тот, который вы показали, будет test_main.cpp и будет включен в команду add_executable(unit-test ...
.
В вашем новом файле main.cpp не будет ссылок на gtest, либо включает, либо функции.
Ответ 2
Из ошибок компоновщика очевидно, что вы не связывали библиотеку gtest с вашей тестовой программой.
См. http://code.google.com/p/googletest/wiki/Primer
Чтобы написать тестовую программу с помощью Google Test, вам необходимо скомпилировать Google Test в библиотеку и связать свой тест с ней....
Просто ознакомьтесь с этим документом для получения подробной информации о вашем компиляторе и системе.