C++ gcov未生成所有gcda文件

C++ gcov未生成所有gcda文件,c++,cmake,gcov,C++,Cmake,Gcov,我已经尝试了很多我创建的解决方案,但都没有成功。我正在为一个项目编写一个新代码,但这段代码被许多硕士和博士学位所触动,他们并不关心如何使其可读。所以确实有很多东西是没有用的,甚至没有用过 然后我开始讨论gcov和lcov,但在生成.info文件并加载到lcov html之后,除了我的所有文件之外,它只跟踪主文件!甚至知道还有很多其他的函数和文件被使用 (真的很抱歉我的英语不好,我来自巴西亚马孙州的马瑙斯,英语说得不好!但是我找了一个月的答案,尝试了很多东西,但一点运气都没有。) 我的文件看起来像

我已经尝试了很多我创建的解决方案,但都没有成功。我正在为一个项目编写一个新代码,但这段代码被许多硕士和博士学位所触动,他们并不关心如何使其可读。所以确实有很多东西是没有用的,甚至没有用过

然后我开始讨论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 )
   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 )
src目录上的另一个类似于:

   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 )
   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 )
如有任何帮助,包括对更好的CMAKE文件的建议,我们将不胜感激, 提前谢谢

抱歉耽搁了

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

因此,您需要按照在所有目标定义之前的建议附加这些标志(即,在主
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(....)

libQueryProcessor对象文件是否已使用正确的标志编译?使用
清洁;使VERBOSE=1
切换到VERBOSE模式,并仔细检查编译器和链接器调用标志。此外,在定义新目标或添加子目录之前移动所有编译标志操作也是明智的。谢谢@user3159253!现在已经移动了标记操作,并仔细阅读了详细的输出。文件与另一个文件的唯一区别是,在链接CXX可执行文件时,它有一个-fprofile arcs参数,这是每个cpp中都需要的参数吗?@thomazandrade您应该试试。它是葡萄牙语的。你的英语还不错,但我想你在那边可能会更舒服:)真的谢谢你!!现在它就像一个魔咒,唯一的问题是它在许多不同的文件夹中生成.gcda文件,但我现在要寻找一个解决方案!再次感谢!!有一个伟大的工作日根据您的需要,可能有各种各样的解决方案。您可以编写一个shell脚本来-规则-收集它们,或者尝试重新构造对象文件的创建位置。你只需要更准确地阐述你的需求,并提出适当的问题;)