使用cmake配置代码覆盖率

时间:2016-03-21 05:01:35

标签: c++ linux cmake code-coverage gcov

我在linux机器上,试图使用cmake来构建一个源代码构建项目。对于代码覆盖,我查看了gcov并遵循了一个简单的教程,为示例helloWorld.cpp程序生成适当的文件。唯一的要求是使用-fprofile-arcs -ftest-coverage标志进行编译。链接-lgcov标志,可以与-coverage标志一起完成。

现在有了棘手的部分。我有一个CMakeLists.txt智能内容,如下所示:

cmake_minimum_required (VERSION 2.8)
project (SomeName)

SET(GCC_COVERAGE_COMPILE_FLAGS "-g -O0 -coverage -fprofile-arcs -ftest-coverage")
SET(GCC_COVERAGE_LINK_FLAGS    "-coverage -lgcov")
SET( CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" )
SET( CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}" )

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

include_directories(include)
set(CATCH_HEADER_PATH ${PROJECT_SOURCE_DIR}/test/catch.hpp)

add_executable(runTest ${PROJECT_SOURCE_DIR}/test/test.cpp ${CATCH_HEADER_PATH}) 

所以我也包含了适当的编译时标志以及链接器标志,并正确地附加了它们。需要注意的另一件事是set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)行,它表示可执行文件将在 bin 目录中生成。

现在一切都按预期工作,但覆盖文件未正确生成。我按照以下步骤操作:

mkdir build && cd build
cmake ..
make -j4
./bin/runTest

并且 bin 文件夹中没有生成其他文件。但是,经过更多检查,我发现还有另一个位置 build/CMakeFiles/runTest.dir/test ,其中test.cpp.o最初位于最后一步./bin/runTest之后,有两个新文件 - {{1 }&生成test.cpp.gcda

我已经尝试将test.cpp.gcno复制到 test/test.cpp 并运行build/CMakeFiles/runTest.dir/test,但未能说明 - gcov test.cpp

1 个答案:

答案 0 :(得分:1)

gcov和gcc版本的不匹配使这种情况发生。 gcc符号链接/usr/bin/gcc设置为最新gccg++相同,但gcov中的$PATH仍然指向{{1}的旧版本}}