【问题标题】:Error in compilation and Linking using CMake with Gcov使用 CMake 和 Gcov 进行编译和链接时出错
【发布时间】:2012-09-20 14:48:51
【问题描述】:

在使用 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 中添加任何其他内容?

【问题讨论】:

  • 你是如何解决这个问题的?

标签: cmake


【解决方案1】:

设置编译器标志

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

链接到 lgcov

target_link_libraries(
    <target-name>
    gcov
)

或者使用CMake module

【讨论】:

    【解决方案2】:

    假设您只想覆盖 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

    【讨论】:

    • 感谢您的回复,但没有成功。不过我找到了另一种方法。有一行 target_link_libraries(gcov) 解决了这个问题。
    • 不要使用CMAKE_CXX_FLAGS,而是使用add_compile_optionstarget_compile_definitions
    猜你喜欢
    • 1970-01-01
    • 2020-11-11
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    相关资源
    最近更新 更多