. Soy nuevo en CMake y estoy usando Google Test Framework. He buscado ejemplos más complejos de combinación de CMake y el marco de prueba de Google, pero no he tenido mucha suerte. Esperaba que alguien pudiera dar su opinión sobre la configuración a la que llegué y responder una pregunta por mí. Aquí está la estructura del proyecto básico:Salida de prueba unitaria y estructura de proyecto. Asesoramiento --- CMake + Google Test Framework
ProjectFolder
-CMakeLists.txt
/construcción
/include
-todas mis archivos .h
/src
-CMakeLists.txt
-todos mis archivos .cpp
/tests
-CMakeLists.txt
/GTEST
CMakeLists.txt de -Google
/burla
-CMakeLists.txt
-cpp y h archivos para simulacros
En pocas palabras, el archivo raíz cmake agrega src y las pruebas como subdirectorios. El archivo src cmake engloba los archivos cpp en una biblioteca. El archivo cmake de pruebas agrega burlas y gtest como subdirectorios. El archivo cmake falso engloba todos sus archivos cpp en una segunda biblioteca. Finalmente, el archivo cmake en la carpeta de pruebas vincula la biblioteca src, las bibliotecas de google y las bibliotecas de simulacros con los ejecutables de prueba de la unidad.
Lo que finalmente dan son varios ejecutables: objA_unittest, objB_unittest, etc
Un par de cosas:
Para construir todo esto y mantener mi directorio del proyecto bastante limpio Me CD en la construcción todavía carpeta y ejecute "cmake .." Esto parece funcionar muy bien y yo estaba planeando configurar vim para ejecutar siempre fuera de esta carpeta. ¿Alguien tiene alguna sugerencia o ve algún problema con este enfoque?
No me gusta la idea de tener que anidar la biblioteca de Google en mi carpeta de proyectos (especialmente si finalmente tengo varios proyectos que la usan), pero como parece muy recomendable no precompilar la Las bibliotecas de Google no veo cómo evitar esto. Sin embargo, si alguien sabe de una mejor manera, me encantaría escucharlo.
Ejecutando las pruebas. Me gusta que todo lo que tengo que hacer es ejecutar "hacer prueba" para ejecutar todas las pruebas de mi unidad con ctest. Sin embargo, descubrí que no me gusta mucho la salida. Cada unidad ejecutable de prueba contiene varias pruebas de unidades diferentes. Ejecutar estos directamente proporciona comentarios muy detallados de Google. Si una de las pruebas en un archivo ejecutable falla, sé exactamente qué prueba falla y por qué. Previamente, utilicé un archivo MAKE y al final del archivo MAKE simplemente ejecuté todas las pruebas. Primero intenté arreglar esto creando un objetivo de compilación personalizado en cmake.Sin embargo, solo ejecuta el primer comando. O necesito una forma de obtener una salida más detallada desde CTest O bien, necesito una manera de generar automáticamente un script bash o algo similar de CMake para ejecutar cada ejecutable de prueba unitario. En otras palabras, tengo el archivo cmake configurado ahora, así que solo tengo que agregar la prueba unitaria en un lugar para generar el ejecutable, y no quiero tener que recordar agregarlo a un segundo lugar si puedo evitarlo eso. ¿Alguien tiene alguna experiencia que sería útil en este punto?
Muchas gracias de antemano.
Tenga cuidado: ya hay un objetivo CMake predefinido llamado 'prueba'. Por lo general, no se recomienda agregar un destino personalizado con ese mismo nombre. También puede llamar a "ctest -V" o "ctest -VV" en el mismo directorio donde está llamando "realizar prueba" ahora, y ejecutará el conjunto de pruebas completo * y * le mostrará el resultado de todas las pruebas. (-V == verbose, -VV == muy verboso) – DLRdave
Solo para tu información, realmente aprecio la respuesta rápida (y también la de abajo). He estado ocupado con la escuela y no he tenido tiempo de probar ninguno de estos. Tan pronto como lo haga, elegiré la mejor respuesta de manera apropiada. Solo quería que supieras que no lo había olvidado. :) – Landon