Как скомпилировать GoogleTest на Windows, используя MINGW с MSY? - PullRequest
10 голосов
/ 09 марта 2011

Моя потребность проста. Я должен скомпилировать и использовать GoogleTest на Windows, используя MinGW с MSY. У кого-нибудь есть такой опыт?

Спасибо за ответы.

Ответы [ 4 ]

13 голосов
/ 12 марта 2011

Это заняло у меня некоторое время, но я понял это.Вот руководство для тех, кто сталкивается с такой же проблемой.

Чтобы иметь возможность скомпилировать GoogleTest на Windows, следуйте этим инструкциям:

  1. Я предполагаю, что у вас MinGW с MSYS istalled.

  2. Загрузите и установите CMake с официального сайта http://www.cmake.org/. Используйте версию установщика Win32.После завершения процесса установки скопируйте исполняемые файлы из «xxx / CMake / bin» в «xxx / MinWG / bin».

  3. Загрузите и установите Python из http://www.python.org/.И снова установщик Windows отлично справляется со своей задачей.После завершения процесса установки скопируйте папку python формы «python.exe» в «xxx / MinWG / bin».

  4. Загрузите последнюю стабильную версию GoogleTest из http://code.google.com/p/googletest/и распакуйте его в какую-нибудь папку.

  5. Запустите терминал MSYS и выполните следующие команды.

    cd xxx/gtest-x.x.x
    cmake -G "MSYS Makefiles"
    make
    
  6. Если у вас есть ошибки компиляции из pthread, следуйте эти инструкции.

  7. Скопируйте включаемую папку «xxx / gtest-xxx / include» в ваш MinGW gcc include.Скопируйте библиотечные файлы "xxx / gtest-xxx / *. A" в вашу библиотеку MinGW gcc.

  8. Когда вы компилируете тесты, добавьте параметр "-lgtest" в gcc.

РЕДАКТИРОВАТЬ Комментаторы правы.Копирование исполняемых файлов работало для меня, но в целом это не очень хорошая практика.Попробуйте вместо этого использовать символическую ссылку .

3 голосов
/ 18 октября 2016

Чтобы собрать libgtest.a без cmake / python, но только с использованием mingw make, в gtest теперь есть папка 'make' с простым старым make-файлом.

  1. Убедитесь, что mingw \ binнаходится в пути (попробуйте запустить «g ++» или что-то в этом роде).
  2. Войдите в папку gtest 'googletest \ make' и запустите "make".
  3. Чтобы проверить, запустите файл sample1_unittest (gtestдолжен появиться пример результатов теста).
  4. Чтобы сгенерировать библиотеку 'libgtest.a', запустите 'ar -rv libgtest.a gtest-all.o'

Созданная библиотекаполная статическая библиотека без сгенерированных dll.

Это должно быть все.

Кстати, это также работает для построения googlemock, просто войдите в папку googlemock вместо googletest и выполните то же самоепроцедура.

1 голос
/ 27 февраля 2015

Вам не нужно копировать двоичные файлы, если они находятся на вашем пути.Установите Python и 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

Testесли все работает:

cd make
make
./sample1_unittest.exe
1 голос
/ 17 июня 2014

В качестве альтернативы можно также создать googletest, используя обычный MSYS / Mingw make.

Так вот мой альтернативный способ:

  1. Убедитесь, что MSys / MingWустановлен в вашей Windows, и для него установлена ​​среда PATH

  2. Откройте окно cmd - здесь вы также можете явно указать PATH

  3. CD в разархивированный каталог googletest

  4. Конфигурирование вызова с помощью sh (часть MSys): sh configure

  5. Вызов make ->libgtest.a должно быть построено.Он находится в вашем каталоге googletest lib/.libs

  6. См. README googletest о том, как интегрировать libgtest.a в вашу систему.Также см. Googletest primer в googletest wiki о том, как скомпилировать.В качестве альтернативы укажите путь к библиотеке для gcc -L<googleTestDir>/lib/.libs и добавьте -lgtest для связи с исполняемым файлом тестового проекта.

  7. При использовании макроса 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();
    }
    
...