4

我在使用 gcov 获取覆盖信息时在编译和链接期间遇到以下错误

error: undefined reference to '__gcov_merge_add'
error: undefined reference to '__gcov_init'

我将标志传递给 CMakeLists.txt,如下所示:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
set(CMAKE_EXE_LINKER_FLAGS
    "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")

我是否必须在 CMakeLists.txt 中添加任何其他内容?

4

2 回答 2

5

设置编译器标志

add_compile_options(-g -O0 -fprofile-arcs -ftest-coverage)

链接到 lgcov

target_link_libraries(
    <target-name>
    gcov
)

或使用CMake 模块

于 2018-02-27T09:47:05.000 回答
0

假设您只想覆盖 Debug 构建,您的标志应该是:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0 -fprofile-arcs -ftest-coverage")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -O0 -fprofile-arcs -ftest-coverage")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage")

有关详细信息,请参阅http://cmake.org/Wiki/CTest/Coveragehttp://cmake.org/Wiki/CTest/Coverage/Example

于 2012-09-28T19:01:26.387 回答