2016-04-30 4 views
1

Я уже пробовал много решений, которые я основал, но ни один из них не работал. Я работаю над новым кодом для проекта, но этот код был затронут множеством степеней магистра и доктора, которые не заботятся о том, чтобы сделать его понятным. Таким образом, есть действительно множество вещей, которые не полезны или даже используются.gcov не генерирует все файлы gcda

Затем я возглавляю gcov и lcov, но после того, как я сгенерировал файл .info и загрузил в lcov html, кроме всех моих файлов, он просто отслеживает основной файл! Даже знание большого количества других функций и файлов было использовано!

(Действительно извините за мой плохой английский, я из Манаус, Амазонас - Бразилия, а не хороший английский динамик Но Ive искал этот ответ на как месяц пытаются много вещей, но не получил никакой удачи на всех)

Мои файлы выглядеть следующим образом:

-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; make VERBOSE = 1', чтобы перейти к подробному режиму и тщательно проверить флаги вызова компилятора и компоновщика. – user3159253

+0

Также целесообразно перемещать все манипуляции с флагом компиляции _before_, определяя новую цель или добавляя подкаталог. – 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

В зависимости от ваших потребностей могут быть различные решения. Вы можете написать сценарий оболочки, чтобы-собрать все их, или вы можете попытаться переструктурировать, где создаются ваши объектные файлы. Вам просто нужно более точно сформулировать свои потребности и задать правильные вопросы;) – user3159253

Смежные вопросы