¿Cómo configurar CodeCov para un proyecto C ++ w / CMake en TravisCI?

Estaba intentando configurar CodeCov en mi repository de GitHub con TravisCI. Como mi repository está en C ++ y ya usé CMake, básicamente after_success y pegué la label after_success de este ejemplo en mi file .travis.yml :

 after_success: # Creating report - cd ${TRAVIS_BUILD_DIR} - lcov --directory . --capture --output-file coverage.info coverage info - lcov --remove coverage.info '/usr/*' --output-file coverage.info - lcov --list coverage.info # Uploading report to CodeCov - bash <(curl -s https://codecov.io/bash) || echo "Codecov did not collect coverage reports" 

Empujé un file .codecov.yml personalizado para proporcionar mi token y las configuraciones de notificación, pero el after_success es solo el sugerido en el ejemplo. Realmente no estoy familiarizado con lcov , así que no tengo idea si falta algo más o para qué sirven esas llamadas.

En cuanto a la documentation de CodeCov, no pude encontrar lo que podría estar perdiendo, pero mis informes de cobertura están vacíos porque lcov no puede encontrar algún misterioso file .gcda (supongo). Los documentos de CodeCov no mencionan eso en ningún lado, así que supongo que me falta un paso importante en mi configuration (¿o quizás el file no se puede encontrar por alguna razón …?)

Este es el resultado de la etapa posterior al after_success de after_success :

 $ lcov --directory . --capture --output-file coverage.info Capturing coverage data from . Found gcov version: 4.8.4 Scanning . for .gcda files ... geninfo: ERROR: no .gcda files found in .! $ lcov --remove coverage.info '/usr/*' --output-file coverage.info Reading tracefile coverage.info lcov: ERROR: no valid records found in tracefile coverage.info $ lcov --list coverage.info Reading tracefile coverage.info lcov: ERROR: no valid records found in tracefile coverage.info $ bash <(curl -s https://codecov.io/bash) || \ echo "Codecov did not collect coverage reports" _____ _ / ____| | | | | ___ __| | ___ ___ _____ __ | | / _ \ / _` |/ _ \/ __/ _ \ \ / / | |___| (_) | (_| | __/ (_| (_) \ V / \_____\___/ \__,_|\___|\___\___/ \_/ Bash-8fda091 ==> Travis CI detected. project root: . --> token set from env ... ==> Running gcov in . (disable via -X gcov) ==> Python coveragepy not found ==> Searching for coverage reports in: + . -> Found 3 reports ==> Detecting git/mercurial file structure ==> Appending build variables + TRAVIS_OS_NAME ==> Reading reports - Skipping empty file ./coverage.info + ./doc/****.zip bytes=337165 -----> That's not a report. + ./doc/****.pdf bytes=353614 -----> That's not a report. ==> Appending adjustments http://docs.codecov.io/docs/fixing-reports + Found adjustments ==> Uploading reports url: https://codecov.io query: branch=codecov&commit=*****... -> Pinging Codecov -> Uploading to S3 https://codecov.s3.amazonaws.com -> View reports at https://codecov.io/github/******** 

El problema era con el comstackdor de Cmake y las banderas del linker. Para que GCov (parte de GCC, y utilizado por lcov ) brinde información de perfil y testings de cobertura, se deben establecer algunos indicadores.

De la cobertura del código para las testings de la unidad C :

Específicamente, necesita que el comstackdor agregue información de creación de perfiles al código del object, lo que se hace agregando los indicadores -fprofile-arcs y -ftest-coverage a su command de compilation.

El primer indicador agrega lógica al código del object para generar información de perfil genérica. Esta es información sobre la frecuencia con la que se ejecuta cada bloque básico. Cuando se ejecuta su progtwig, toda esta información se saveá en un file nuevo con la extensión .da, junto al file .o. Los datos en este file no son específicos de la cobertura, pero serán utilizados por gcov.

El segundo indicador que pasó a GCC, -ftest-coverage , también agregará lógica a sus files de object. Esta vez, el objective es generar la información específica de cobertura. Hay dos files que se generarán, un .bb y un .bbg. El file .bb es un file de asignación simple de bloques básicos a numbers de línea. El file .bbg enumera cada uno de los arcos en el file fuente correspondiente que se ejecutó al ejecutar la aplicación. Este dato es utilizado por gcov para rebuild el gráfico de flujo del progtwig real, a partir del cual se pueden calcular todos los conteos básicos de bloques y ejecuciones de arco.

Además, las fonts deben estar vinculadas con -lgcov --coverage . En mi caso, dado que estoy usando Cmake, necesitaba especificarlos con la function set_target_properties :

 add_executable(dss-sim dss-sim.cpp) target_link_libraries(dss-sim list of my static libs ) # The libs above also need to be compiled with the same flags. set_target_properties(dss-sim PROPERTIES COMPILE_FLAGS "-ftest-coverage -fprofile-arcs" LINK_FLAGS "-lgcov --coverage" ) 

Finalmente, dado que normalmente no desea include las testings de su unidad en su informe de cobertura, no definirá los indicadores del comstackdor para ellas. Sin embargo, tenga en count que si vincula las testings de su unidad con las bibliotecas que fueron comstackdas con las opciones de gcov, igual deberá agregar las banderas del linker.