2011-03-09 19 views
10

Mi necesidad es simple. Tengo que compilar y usar googletest en Windows usando MinGW con msys. ¿Alguien tiene alguna experiencia haciendo esto?¿Cómo compilar googletest en Windows usando mingw con msys?

Gracias por responder.

+0

Por favor, describa lo que está pasando mal. – LumpN

+0

Tengo un progreso. Parece que no se puede instalar sin una pitón que no tengo. Me apetece resolverlo ahora. –

Respuesta

12

Me tomó un tiempo pero lo descubrí. Aquí está la guía para cualquier persona que enfrenta el mismo problema.

Para poder compilar GoogleTest en Windows siga estas instrucciones:

  1. que se supone que tiene MinGW con MSYS istalled.

  2. Descargue e instale CMake desde el sitio oficial http://www.cmake.org/. Utilice la versión del instalador de Win32 . Una vez que haya completado el proceso de instalación, copie los archivos ejecutables de "xxx/CMake/bin" a "xxx/MinWG/bin".

  3. Descargue e instale Python desde http://www.python.org/. De nuevo, el instalador de Windows hace bien el trabajo . Una vez que haya completado el proceso de instalación, copie la carpeta de python "python.exe" en "xxx/MinWG/bin".

  4. Descargue el último GoogleTest estable desde http://code.google.com/p/googletest/ y descomprímalo en alguna carpeta.

  5. Ejecute el terminal MSYS y ejecute los siguientes comandos.

    cd xxx/gtest-x.x.x 
    cmake -G "MSYS Makefiles" 
    make 
    
  6. Si tiene errores de compilación de pthread siga these instrucciones.

  7. Copie la carpeta de inclusión "xxx/gtest-x.x.x/include" en su MinGW gcc include. Copie los archivos de la biblioteca "xxx/gtest-x.x.x/*. A" en su MinGW gcc lib.

  8. Cuando compile las pruebas agregue el parámetro "-lgtest" a gcc.

EDITAR comentaristas tienen razón. El manejo de los archivos ejecutables funcionó para mí, pero en general no es una buena práctica. Intenta usar un symbolic link en su lugar.

+0

¿Por qué copiar y no enlazar esos archivos ejecutables? – mbx

+0

En realidad, tanto CMake como Python no se construyen estáticamente, por lo tanto, ambos no funcionan (bloqueo y ciclo infinito) cuando se llaman desde el shell de msys. – mbx

1

Como alternativa, también es posible construir Googletest utilizando la marca MSYS/Mingw habitual.

Así que aquí es mi forma alternativa:

  1. Asegúrese MSys/MingW está instalado en el Windows y el entorno PATH se establece en que

  2. Abra una ventana de cmd - puede establecer el PATH explícitamente aquí, así

  3. CD en el directorio descomprimido googletest

  4. de configuración de llamadas wi th sh (parte de MSys): sh configure

  5. Debe crearse la llamada make ->libgtest.a. Se coloca en el directorio de googletest-lib/.libs subdirectorio

  6. Ver README de googletest de cómo integrar la libgtest.a a su sistema. También vea Googletest primer en el googletest wiki de cómo compilar. Alternativamente, especifique la ruta de la biblioteca para gcc y agregue -lgtest para vincularlo con el ejecutable de su proyecto de prueba.

  7. Al utilizar ASSERT_DEATH macro para comprobar si afirma en su código de prueba (es decir, afirma en su lib o aplicación, no en googletest), llame SetErrorMode - principal ejemplo:

    #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(); 
    } 
    
1

Usted don' Necesito copiar los binarios siempre que los tenga en su camino. Instala Python y CMake. Prueba de ellos en sus MSYS (consola MinGW)

which cmake 
which python 

Si ves el camino, entonces usted tiene los binarios. Si no fuera así, su trayectoria a su variables ambientales> PATH o simplemente actualizar dentro MSYS (rutas de instalación de actualización si es necesario)

export PATH=$PATH:/c/Program Files (x86)/CMake/bin/cmake.exe:/c/Python27/python.exe 

Entonces se puede construir como se sugiere:

cd xxx/gtest-x.x.x 
cmake -G "MSYS Makefiles" 
make 

prueba si todo funciona:

cd make 
make 
./sample1_unittest.exe 
2

Para construir libgtest.a sin cmake/pitón, pero sólo utilizando MinGW hacen, GTEST ahora tiene una carpeta 'hacer' con un makefile viejo y simple en él.

  1. Asegúrate de que mingw \ bin se encuentre en la ruta (intenta ejecutar 'g ++' o algo así).
  2. Ingrese a la carpeta gtest 'googletest \ make' y ejecute 'make'.
  3. Para probar, ejecute 'sample1_unittest' (debería aparecer la salida de la prueba de muestra gtest).
  4. Para generar la biblioteca 'libgtest.a', ejecutar 'ar -rv libgtest.a GTEST-all.o'

La biblioteca creada es una biblioteca estática completa sin DLL generado.

Eso debería ser todo.

Por cierto, esto también funciona para construir googlemock, solo ingrese la carpeta googlemock en lugar de googletest, y siga el mismo procedimiento.

+0

gracias @ jesper-matthiesen funcionó. En caso de que alguien se enfrente al error de ld.exe no pudo encontrar lpthread. Intente ejecutar mingw-get install libpthreadgc-dev como se menciona en el comentario de [link] (http://mingw-users.1079350.n2.nabble.com/GCC-doesn-t-work-quot-ld-exe-cannot- find-lpthread-quot-td7584243.html). Gracias –

Cuestiones relacionadas