如何在CMake中定义覆盖率文件的输出目录

问题描述 投票:0回答:1

我正在尝试制作一个非常简单的回归模型(除其他外),构建和编译覆盖率的 GCC 目标,执行,然后发布标准的 Cobertura 覆盖率报告(全部在 Jenkins 内)。 Jenkins 部分在这里有些无关紧要,我目前只关心 CMake 语法。这是到目前为止我的 CMake 文件:

cmake_minimum_required( VERSION 3.15 )

# Project's name
project( my_project )

# Set the output folder where your program will be created
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/test/bin)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})

set( CMAKE_VERBOSE_MAKEFILE on )

# Generate coverage on GCC.
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
    set(LDFLAGS "${LDFLAGS} -lgcov -fprofile-arcs")
endif()

# Includes and Sources
include_directories(${PROJECT_SOURCE_DIR}/inc)
file(GLOB APP_SRC "./src/*.c")
file(GLOB TEST_DEPENDS_SRC "./test/src/*.c")

# Add executable to list.
add_executable( ${PROJECT_NAME}_Test ${APP_SRC} ${TEST_DEPENDS_SRC} )

这会在目录 /test/build/gcc/CMakeFiles/my_project.dir/* 中生成我的 *.gcno 和 *.gcda 文件,但为了便于后期处理,我想我希望将这些文件与源代码放在一起。那可能吗?如果是这样,怎么办?这是最佳实践吗?对于 CMake,我还是很陌生。

gcc cmake gcov gcovr
1个回答
0
投票

这里有一个 cmake 模块 https://github.com/StableCoder/cmake-scripts(请参阅 code-coverage.cmake),它可能适合您。

同时,几年前我开发了一个支持两者的递归构建:

  • 单独的构建目录,如 cmake
  • gcov/lcov 代码覆盖率

技巧是在每个包含生成的 .info / .gcno / .gcd 文件的构建目录中生成返回 .cpp 源文件的符号链接。

© www.soinside.com 2019 - 2024. All rights reserved.