2016-04-30 525 views
1

我已经尝试了很多我创建的解决方案,但都没有工作。我正在为一个项目编写一个新的代码,但是这个代码被许多不关心让它重现的硕士和博士学位所触动。所以有很多事情没有用,甚至没有用过。gcov不生成所有gcda文件

然后我头脑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建议, 在此先感谢

+0

是否有libQueryProcessor对象文件实际上已经用适当的标志编译?使用'make clean;使VERBOSE = 1'切换到详细模式并仔细检查编译器和链接器调用标志。 – user3159253

+0

此外,在定义新目标或添加子目录之前移动所有编译标志操作是明智的。 – user3159253

+0

谢谢@ user3159253!现在已经移动了标志操作并仔细研究了详细输出。从一个文件到另一个文件的唯一区别是当链接CXX可执行文件时它有一个-fprofile-arcs参数,这是每个cpp都需要的吗? –

回答

0

抱歉的延迟。

您需要编译程序中的每个源文件都有适当的选项来使用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(....) 
+0

真的谢谢你!现在它就像一个魅力,唯一的问题是,它在很多不同文件夹中生成.gcda文件,但我现在会寻找解决方案!再次感谢!!祝您有个愉快的一周 –

+0

根据您的需求,可能会有各种解决方案。您可以编写一个shell脚本来 - 全部收集它们,或者您可以尝试重新构建您的对象文件创建的位置。你只需要更精确地制定你的需求并提出适当的问题;) – user3159253