Open CJxD opened 4 years ago
When you want to use the gcovr_*
targets, another way could be to use the --gcov-executable
option of gcovr
:
include(CodeCoverage)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(GCOVR_ADDITIONAL_ARGS --gcov-executable "llvm-cov gcov")
endif()
append_coverage_compiler_flags()
setup_target_for_coverage_gcovr_html(
NAME coverage-html
EXECUTABLE ctest
)
Looking at its help it seems you could also set the GCOV environment variable instead:
$ gcovr --help
GCOV Options:
The 'gcov' tool turns raw coverage files (.gcda and .gcno) into .gcov
files that are then processed by gcovr. The gcno files are generated by
the compiler. The gcda files are generated when the instrumented program
is executed.
--gcov-executable GCOV_CMD
Use a particular gcov executable. Must match the
compiler you are using, e.g. 'llvm-cov gcov' for
Clang. Can include additional arguments. Defaults to
the GCOV environment variable, or 'gcov': 'gcov'.
When using
gcov
with a project built using Clang,gcov
is unable to parse the .gcno files, giving the error:version '402*', prefer 'A92*'
.This seems to be because
llvm-cov
is required. I've hacked around this myself by doing the following before including CodeCoverage.cmake:where
llvm-cov.sh
is the following (marked with executable permissions):Could this be added in with a somewhat less hacky workaround?