2016-04-30 11 views
1

Ich habe schon viele Lösungen ausprobiert, die ich gegründet habe, aber keiner von denen funktioniert dann. Ich arbeite an einem neuen Code für ein Projekt, aber dieser Code wurde von vielen Master- und Doktor-Abschlüssen berührt, die nicht darauf abzielen, sie readbar zu machen. Es gibt also eine Menge Dinge, die nicht nützlich oder gar nicht genutzt werden.gcov erzeugt nicht alle gcda files

Dann gehe ich über gcov und lcov, aber nachdem ich .info-Datei generieren und in lcov html, neben all meinen Dateien es nur verfolgen die Hauptdatei! Auch viele andere Funktionen und Dateien wurden verwendet!

(Wirklich leid für meinen schlechtes Englisch, im von Manaus, Amazonas - Brasilien und keine guten Englisch-Sprecher Aber ive einer Menge Dinge versuchen, für wie ein Monat für diese Antwort gesucht, aber überhaupt kein Glück bekam)

Meine Dateien wie folgt aussehen:

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

bekam ich ein CMakeFile.txt im Verzeichnis Projektquelle, die wie folgt aussehen:

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) 

und ein weiteres auf src-Verzeichnis, das aussieht wie folgt aus:

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) 

Jede Hilfe wird mit Vorschlägen für eine bessere CMakeFiles geschätzt werden, Dank im Voraus

+0

Haben libQueryProcessor-Objektdateien tatsächlich mit richtigen Flags kompiliert? Verwende 'make clean; mach VERBOSE = 1 ', um in den ausführlichen Modus zu wechseln, und überprüfe Compiler- und Linker-Aufruf-Flags sorgfältig. – user3159253

+0

Es ist auch ratsam, alle Kompilierungsflagmanipulationen _before_ zu verschieben, um ein neues Ziel zu definieren oder ein Unterverzeichnis hinzuzufügen. – user3159253

+0

Danke @ user3159253! Bewegen Sie jetzt bereits Flaggenmanipulationen und lesen Sie die ausführliche Ausgabe sorgfältig durch. Der einzige Unterschied von einer Datei zu einer anderen besteht darin, dass beim Verknüpfen der CXX-Datei das Argument -fprofile-arcs verwendet wird. Ist dies die Datei, die in jeder cpp benötigt wird? –

Antwort

0

Sorry für eine Verzögerung.

Sie müssen kompilieren jede Quelldatei im Programm mit geeigneten Optionen für die Verwendung von gcov. Die documentation erwähnt -fprofile-args -ftest-coverage, aber Sie möchten vielleicht andere Option im Zusammenhang mit Profilerstellung verwenden.

Sie müssen also anhängen diese Flaggen wie in How to add linker or compile flag in cmake file? vor allen Zieldefinitionen (dh irgendwo am Anfang des Haupt CMakeLists.txt) vorgeschlagen Sie können eine CMake Option hinzufügen möchten diese Flags zu steuern, auf einmal:

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

Wirklich danke !! Jetzt funktioniert es wie ein Zauber, das einzige Problem ist, dass es .GCDA-Dateien in vielen verschiedenen Ordnern erzeugt, aber ich werde jetzt nach einer Lösung suchen! Danke noch einmal!! Haben Sie eine tolle Woche –

+0

Je nach Ihren Bedürfnissen könnte es verschiedene Lösungen geben. Sie können ein Shell-Skript in -rule- schreiben, um alle zu sammeln, oder Sie versuchen, die Struktur Ihrer Objektdateien neu zu strukturieren. Sie müssen nur Ihre Bedürfnisse genauer formulieren und richtige Fragen stellen;) – user3159253