Я недавно был продан с использованием CMake для компиляции моих проектов C ++, и теперь я хотел бы начать писать некоторые модульные тесты для моего кода.Я решил использовать утилиту Google Test, чтобы помочь с этим, но мне нужна помощь в начале работы.
Весь день я читал различные руководства и примеры включают Primer , введение в IBM и некоторые вопросы по SO ( здесь и здесь ), а также другие источники, которые я потерял.Я понимаю, что есть много чего, но почему-то у меня все еще есть трудности.
В настоящее время я пытаюсь реализовать самый простой тест, чтобы подтвердить, что я правильно скомпилировал / установил gtest, и он не работает.Единственный исходный файл (testgtest.cpp) взят почти точно из этого предыдущего ответа:
#include <iostream>
#include "gtest/gtest.h"
TEST(sample_test_case, sample_test)
{
EXPECT_EQ(1, 1);
}
и моего связанного CMakeLists.txt таков:
cmake_minimum_required(VERSION 2.6)
project(basic_test)
# Setup testing
enable_testing()
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIR})
# Add test cpp file
add_executable(runUnitTests
testgtest.cpp
)
# Link test executable against gtest & gtest_main
target_link_libraries(runUnitTests ${GTEST_LIBRARY_DEBUG} ${GTEST_MAIN_LIBRARY_DEBUG})
add_test(
NAME runUnitTests
COMMAND runUnitTests
)
Обратите внимание, что я выбрал ссылку на gtest_main вместо предоставления main в конце файла cpp, так как считаю, что это позволит мне более легко масштабировать тестирование до нескольких файлов.
При сборке сгенерированногоФайл .sln (в Visual C ++ 2010 Express) Я, к сожалению, получаю длинный список ошибок вида
2>msvcprtd.lib(MSVCP100D.dll) : error LNK2005: "public: virtual __thiscall std::basic_iostream<char,struct std::char_traits<char> >::~basic_iostream<char,struct std::char_traits<char> >(void)" (??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ) already defined in gtestd.lib(gtest-all.obj)
, который, по моему мнению, означает, что я не могу успешно связываться с библиотеками gtest.Я убедился, что при связывании с отладочными библиотеками я попытался встроить в режим отладки.
РЕДАКТИРОВАТЬ
Сделав еще несколько копаний, я думаю, что мойПроблема связана с типом библиотеки, в которую я встраиваю gtest.При сборке gtest с CMake, если BUILD_SHARED_LIBS
не проверен, и я связываю свою программу с этими .lib-файлами, я получаю ошибки, упомянутые выше.Однако, если установлен флажок BUILD_SHARED_LIBS
, я создаю набор файлов .lib и .dll.При связывании этих .lib-файлов программа компилируется, но при запуске жалуется, что не может найти gtest.dll.
В чем различия между SHARED
и не SHARED
библиотекой, иесли я выбираю не поделился, почему это не работает?Есть ли в CMakeLists.txt вариант для моего проекта, который мне не хватает?