Моя потребность проста. Мне нужно скомпилировать и использовать googletest в Windows, используя MinGW с msys. Есть ли у кого-нибудь опыт в этом?
Спасибо за ответы.
Моя потребность проста. Мне нужно скомпилировать и использовать googletest в Windows, используя MinGW с msys. Есть ли у кого-нибудь опыт в этом?
Спасибо за ответы.
Мне потребовалось некоторое время, но я понял это. Вот руководство для тех, кто сталкивается с той же проблемой.
Чтобы иметь возможность скомпилировать GoogleTest в Windows, следуйте этим инструкциям:
Я предполагаю, что у вас установлен MinGW с MSYS.
Загрузите и установите CMake с официального сайта http://www.cmake.org/. Используйте версию установщика Win32. После завершения процесса установки скопируйте исполняемые файлы из «xxx/CMake/bin» в «xxx/MinWG/bin».
Загрузите и установите Python с http://www.python.org/. Опять же, установщик Windows отлично справляется со своей задачей. После завершения процесса установки скопируйте папку python формы «python.exe» в «xxx/MinWG/bin».
Загрузите последнюю стабильную версию GoogleTest с http://code.google.com/p/googletest/ и распакуйте ее в какой-нибудь папка.
Запустите терминал MSYS и выполните следующие команды.
cd xxx/gtest-x.x.x
cmake -G "MSYS Makefiles"
make
Если у вас возникли ошибки компиляции из pthread, следуйте этим инструкциям.
Скопируйте включаемую папку «xxx/gtest-x.x.x/include» в ваш MinGW gcc include. Скопируйте файлы библиотеки «xxx/gtest-x.x.x/*.a» в свою библиотеку MinGW gcc.
При компиляции тестов добавьте параметр "-lgtest" в gcc.
EDIT Комментаторы правы. У меня работало копирование исполняемых файлов, но в целом это не очень хорошая практика. Вместо этого попробуйте использовать символическую ссылку.
Чтобы собрать libgtest.a без cmake/python, а только с помощью mingw make, в gtest теперь есть папка make с простым старым makefile.
Созданная библиотека представляет собой полную статическую библиотеку без генерируемых dll.
Это должно быть все.
Кстати, это также работает для сборки googlemock, просто введите папку googlemock вместо googletest и выполните ту же процедуру.
Из файла README https://github.com/google/googletest/tree/master/googletest : при создании Google Test как отдельного проекта типичный рабочий процесс начинается с:
mkdir mybuild # Create a directory to hold the build output.
cd mybuild
cmake ${GTEST_DIR} # Generate native build scripts.
Если вы хотите создать образцы Google Test, вы должны заменить последнюю команду на
cmake -Dgtest_build_samples=ON ${GTEST_DIR}
В качестве альтернативы также можно собрать googletest, используя обычную команду MSYS/Mingw.
Итак, вот мой альтернативный способ:
Убедитесь, что MSys/MingW установлен в вашей Windows и для него задана среда PATH.
Откройте окно cmd — здесь вы также можете явно указать PATH
компакт-диск в разархивированный каталог googletest
Вызовите configure с помощью sh (часть MSys): sh configure
Вызов make
-> libgtest.a
должен быть построен. Он находится в подкаталоге lib/.libs
вашего каталога googletest-directory.
См. README googletest о том, как интегрировать libgtest.a
в вашу систему. Также см. руководство по компиляции googletest в вики googletest. В качестве альтернативы укажите путь к библиотеке для gcc -L<googleTestDir>/lib/.libs
и добавьте -lgtest
для связи с исполняемым файлом вашего тестового проекта.
При использовании макроса ASSERT_DEATH
для проверки утверждений в тестируемом коде (имеются в виду утверждения в вашей библиотеке или приложении, а не в googletest), вызовите SetErrorMode
— пример main:
#include <windows.h>
#include "gtest/gtest.h"
int main (int argc, char** argv)
{
// this prevents annoying error message boxes popping up
// when assert is called in your program code
SetErrorMode(SEM_NOGPFAULTERRORBOX);
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Вам не нужно копировать двоичные файлы, если они есть на вашем пути. Установите питон и CMake. Протестируйте их в своем msys (консоль MinGW)
which cmake
which python
Если вы видите путь, значит у вас есть бинарники. Если нет, добавьте их путь к своим переменным среды> PATH или просто обновите в msys (при необходимости обновите пути установки)
export PATH=$PATH:/c/Program Files (x86)/CMake/bin/cmake.exe:/c/Python27/python.exe
Затем вы можете построить, как было предложено:
cd xxx/gtest-x.x.x
cmake -G "MSYS Makefiles"
make
Проверьте, все ли работает:
cd make
make
./sample1_unittest.exe
Вопрос был задан в 2011 году, и в том же году был дан ответ, набравший наибольшее количество голосов. Таким образом, свежий ответ повысит эффективность вопроса.
Инструменты, которые вам нужны и которые я протестировал:
Ветка исходного кода GoogleTest GitHUb 1.10.0
и Windows10
Шаги
Установите mingw64, дважды щелкнув и выбрав путь, в котором нет пробела между именами каталогов, например. Файлы программ
Откройте настройки окон, затем найдите переменные среды и откройте диалоговое окно, чтобы изменить переменную среды Path.
Добавьте имя каталога mingw64/bin в переменную среды пути Windows, например. C:\Users[ИМЯ ПОЛЬЗОВАТЕЛЯ]\mingw64\bin (замените [ИМЯ ПОЛЬЗОВАТЕЛЯ] своим именем пользователя, например, Michael или Lee и т. д.)
Установите CMake. Это процедура установки двойным щелчком мыши. Убедитесь, что путь к каталогу bin добавлен в переменную среды Path. Он будет установлен в C:/Program Files/...
Загрузите репозиторий GoogleTest, извлеките его и создайте каталог сборки внутри извлеченного каталога.
Выполните следующие команды
$ сборка компакт-диска
$ cmake .. -G Makefiles MinGW
$ mingw32-make.exe
Скопируйте четыре статические библиотеки (*.a) из каталога сборки.
[пример: C:\Users[ИМЯ ПОЛЬЗОВАТЕЛЯ]\sourcecodes\googletest-master\build\lib]
в библиотеку MingW64
[пример: C:\Users[ИМЯ ПОЛЬЗОВАТЕЛЯ]\mingw64\x86_64-w64-mingw32\lib]
[например, C:\Users[ИМЯ ПОЛЬЗОВАТЕЛЯ]\sourcecodes\googletest-master\googletest\include\gtest]
Скопируйте весь этот каталог gtest и скопируйте в папку
C:\Users[ИМЯ ПОЛЬЗОВАТЕЛЯ]\mingw64\lib\gcc\x86_64-w64-mingw32\8.1.0\include
Вы готовы идти. Вы можете собрать и связать Googltest со своим проектом C++. Я также вставляю образец CMakelists.txt
cmake_minimum_required(VERSION 3.12)
project(ProjectName VERSION 1.0.0 LANGUAGES CXX)
include_directories(include)
set(SOURCES src/library.cpp include/library.h)
add_executable(libabc ${SOURCES})
#############
## Testing ##
#############
enable_testing()
find_library(GTest gtest)
add_executable (unitTest test/unit_test.cpp)
target_link_libraries (unitTest gtest gtest_main)
add_test(AllFactTest unitTest)
Надеюсь, это сработает.