c++ testing cmake code-coverage cdash

c++ - Guía detallada sobre el uso de gcov con CMake/CDash?



testing code-coverage (2)

Estoy usando CMake con mi proyecto y configuré un servidor cdash para la construcción continua / nocturna. Todo funciona bien y al configurar un crontab, tenemos resultados de compilación / prueba por hora / noche cargados automáticamente en nuestro servidor cdash.

Mi siguiente paso es agregar un informe de cobertura de prueba a la compilación. Encuentro el documento aquí http://www.cmake.org/Wiki/CTest:Coverage pero francamente está un poco lejos de ser una guía práctica.

Actualmente he agregado el indicador requerido (en lugar de -fprofile-arcs -ftest-coverage , creo que --coverage ), el proceso de compilación genera archivos .gcno. Pero luego estoy atascado. El comando

make NightlyCoverage

no parece hacer nada. ¿Alguien podría decirme qué es lo próximo a hacer? El resultado que quiero es make NightlyCoverage , los informes de cobertura se generan y se cargan en el servidor cdash.


He estado usando https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake éxito.

Solo seguí las pautas: agregué los archivos a mi directorio CMAKE_MODULE_PATH , agregué

set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules) if(CMAKE_COMPILER_IS_GNUCXX) include(CodeCoverage) setup_target_for_coverage(${PROJECT_NAME}_coverage ${PROJECT_TEST_NAME} coverage) endif()

en mi CMakeLists.txt . También agregué manualmente gcov como una dependencia para mi objetivo:

if(CMAKE_COMPILER_IS_GNUCXX) target_link_libraries(${PROJECT_TEST_NAME} gcov) endif()

Con esto, simplemente escribo

make my_project_coverage

y obtengo el informe html en el directorio de coverage de mi árbol de compilación.


Tengo un método feo para usar gcovr para hacer un Informe de Cobertura del Código de GCC sin CodeCoverage.cmake : mover todos los *.gcno y *.gcda al directorio raíz del proyecto y luego ejecutar gcovr

$ cd /path/to/your/project $ mkdir build && cd build && cmake .. $ make && make test $ find . -type f /( -iname /*.gcno -or -iname /*.gcda /) -exec cp {} .. /; $ cd .. $ gcovr -v -r .