2012-09-28 63 views
2

林編譯過程中收到以下錯誤,同時使用gcov的獲取覆蓋信息錯誤在編譯和鏈接使用CMake的與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?

回答

0

假設您只想覆蓋調試版本,你的標誌應該是:

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

+2

謝謝你的回覆,但它沒有奏效。儘管我找到了另一種方式。有線路target_link_libraries(gcov)可以解決問題。 –

+0

不要使用'CMAKE_CXX_FLAGS',而是使用'add_compile_options'或'target_compile_definitions'。 – aggsol

1

設置編譯器標誌

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

鏈接lgcov

target_link_libraries(
    <target-name> 
    gcov 
) 

或使用一個CMake module