gcov没有生成所有gcda文件

时间:2016-04-30 04:27:09

标签: c++ cmake gcov

我已经尝试过很多我创立的解决方案,但都没有。我正在为一个项目开发一个新的代码,但是这个代码被很多硕士和博士学位所感动,他们并不关心它是否可以重新编程。所以有很多东西没用,甚至没用过。

然后我关于gcov和lcov,但是在我生成.info文件并加载到lcov html之后,除了我的所有文件之外它只跟踪主文件!即使知道很多其他功能和文件也被使用了!

(真的很抱歉我的英语不好,我来自马瑙斯,亚马逊 - 巴西,而且不是一位优秀的英语演讲者!但是我一直在寻找这个答案,就像一个月尝试了很多东西但根本没有运气)

我的文件如下:

    -src/
       -core/
         -Index.cpp/h
         -PostingList.cpp/h
         -PreProcessor.cpp/h
       -methods/
         ...
       -parser/
         ...
       -run/
         ...
       -structures/
         ...
       -utils/
         ...

我在项目源目录中得到了一个CMakeFile.txt,如下所示:

   cmake_minimum_required (VERSION 2.4)
   project (queryProcessor)

   include("${${PROJECT_NAME}_SOURCE_DIR}/globalVariables.cmake")

   include_directories(${INCLUDES})

   link_directories(${LIBS})

   if(COMMAND cmake_policy)
     cmake_policy(SET CMP0003 NEW)
   endif(COMMAND cmake_policy)

   add_subdirectory(src)

   add_executable(QueryProcessor src/run/queryProcessor.cpp)
   target_link_libraries (QueryProcessor libQueryProcessor rt -fprofile-arcs)

   add_definitions(-O2 )

和src目录中的另一个如下所示:

   aux_source_directory( utils UTILS )
   aux_source_directory( parser PARSER )
   aux_source_directory( methods METHODS )
   aux_source_directory( structures STRUCTURES )
   aux_source_directory( core CORE )
   aux_source_directory( . SRC )
   aux_source_directory( ../../libs-iw/indexer/include UTILS2 )

   add_library( libQueryProcessor ${UTILS} ${UTILS2} ${SRC} ${PARSER} ${METHODS} ${STRUCTURES} ${CORE})

   set(CMAKE_CXX_FLAGS "--coverage")

   include ( ${${PROJECT_NAME}_SOURCE_DIR}/install.cmake )

任何帮助将不胜感激,包括更好的CMakeFiles的建议, 提前谢谢

1 个答案:

答案 0 :(得分:1)

抱歉延迟。

您需要编译程序中的每个源文件,并使用适当的选项来使用gcov。 documentation提及-fprofile-args -ftest-coverage,但您可能还想使用与分析相关的其他选项。

所以你需要追加这些标志,如How to add linker or compile flag in cmake file?中所建议的那样在所有目标定义之前(即主CMakeLists.txt开头附近)你可能想添加一个CMake选项可以立即控制这些标志:

option(USE_GCOV "Create a GCov-enabled build." OFF)
...
if (USE_GCOV)
  set(GCC_COVERAGE_COMPILE_FLAGS "-fprofile-arcs -ftest-coverage")
  set(GCC_COVERAGE_LINK_FLAGS    "-lgcov")
endif()
set( CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" )
set( CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}" )
...
add_subdirectory(...)
add_library(....)
add_executable(....)