2016-05-26 7 views
0

Ich versuche derzeit, Gcov und Gcovr von CMake unter Windows mit MinGW zu verwenden. Das Kompilieren der Dateien mit den richtigen Flags funktioniert wie ein Zauber. CLion verwendet jedoch einen Out-of-Source-Build, den Gcov nicht versteht.Finden und verschieben Sie Dateien mit der Erweiterung zur Build-Zeit mit CMake

Unter Linux habe ich folgendes alle *.gcda und *.gcno den CMAKE_SOURCE_DIR von CMAKE_BINARY_DIR Unterordner zu kopieren:

set(GCOV_DATA_DIR "${CMAKE_SOURCE_DIR}/gcov_data") 
add_custom_target(prepare_coverage 
    # Copy necessary files to CMAKE_SOURCE_DIR 
    COMMAND ${CMAKE_COMMAND} -E make_directory ${GCOV_DATA_DIR} 
    COMMAND find ${CMAKE_BINARY_DIR} -name \"*.gcda\" -o -name \"*.gcno\" | xargs -l -i cp {} "${GCOV_DATA_DIR}" 
) 

Hinweis, dass Test Binärdateien in CMAKE_BINARY_DIR ausgeführt werden. Das funktioniert ziemlich gut und ich kann Gcovr mit einigen zusätzlichen Flags später anrufen, um einen schönen Bericht zu bekommen.

Allerdings habe ich unter Windows nicht xargs (ich war bereits davon überzeugt, dass find hat funktioniert). Um diesen CMake-Befehl plattformunabhängig zu machen, suche ich nach einer Möglichkeit, CMake zu finden, zu kopieren und die Dateien während der Erstellungszeit zu verschieben (ähnlich wie beim Erstellen des Verzeichnisses).

Kann mir jemand sagen, ob das möglich ist und wie soll ich das machen? Natürlich kann ich immer zusätzliche Programme oder Skripte installieren, aber ich würde das lieber in CMake lösen, anstatt alle Entwickler anzuweisen, verschiedene Tools zu installieren.

+0

In Bezug auf 'find' und' cmake' schauen Sie bitte [hier] (http://stackoverflow.com/a/34995590/2436175). Die Tatsache, dass Sie 'find' verwenden können, lässt mich denken, dass Sie etwas wie [msys] (http://www.mingw.org/wiki/msys) installiert haben. – Antonio

+0

Wie schon erwähnt, verwende ich MinGW. Ich habe auch die MSYS-Pakete installiert. –

+0

Wie Sie in meinem Kommentar zu der akzeptierten Antwort sehen können, habe ich jetzt eine Lösung, die Standard-Windows-Tools beinhaltet. –

Antwort

0

Wenn Sie nicht CMAKE_RUNTIME_OUTPUT_PATH in Ihrem Projekt nicht verwenden, dann .gcda und .gcno Dateien im Verzeichnis mit ausführbarem geschaffen, also können Sie dieses Verzeichnis berechnen mit $<TARGET_FILE_DIR:tgt>generator-expression.

Da Sie Namen von Quelldateien kennen, können Sie absolute Pfade aller gcov-bezogenen Dateien berechnen und entsprechende Kopierbefehle ohne find generieren.

Ein anderer Ansatz könnte xargs-ähnlichen Programm/Skript selbst wird writting, Versand es mit Ihrem Projekt, und es in COMMAND verwenden. Also

... aber ich würde lieber dies in CMake lösen, anstatt alle Entwickler anzuweisen, verschiedene Tools zu installieren.

wäre kein Problem.

+0

Beendet mit einer Batch-Datei und einer Bash-Datei (ausgewählt auf Basis des Host-Betriebssystems), die während des Builds aufgerufen wird. Im Batch ist es nicht zu schwer, das gewünschte Verhalten zu erreichen, und die bash-Datei enthält im Wesentlichen das, was ich in meiner Frage erwähnt habe. –