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 .