J'essaie actuellement d'utiliser Gcov et Gcovr de CMake sur Windows en utilisant MinGW. La compilation des fichiers avec les bons indicateurs fonctionne comme un charme. Cependant, CLion utilise une version hors-source que Gcov ne comprend pas.Rechercher et déplacer des fichiers avec l'extension au moment de la construction en utilisant CMake
Sur Linux j'ai utilisé ce qui suit pour copier tous les *.gcda
et *.gcno
aux CMAKE_SOURCE_DIR
de CMAKE_BINARY_DIR
sous-dossiers:
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}"
)
Notez que les fichiers binaires de test sont exécutés dans CMAKE_BINARY_DIR
. Cela fonctionne plutôt bien et je peux ensuite appeler Gcovr avec des drapeaux supplémentaires pour obtenir un bon rapport.
Cependant, sur Windows je n'ai pas xargs
(j'étais déjà pris que find
a fonctionné). Pour rendre cette commande CMake indépendante de la plate-forme, je cherche un moyen de faire en sorte que CMake trouve et copie/déplace les fichiers pendant la construction (comme pour créer le répertoire).
Quelqu'un peut-il me dire si c'est possible et comment je devrais le faire? Bien sûr, je peux toujours installer des programmes ou des scripts supplémentaires, mais je préfère résoudre cela dans CMake au lieu d'avoir à demander à tous les développeurs d'installer des outils différents.
En ce qui concerne 'find' et' cmake', veuillez jeter un coup d'oeil [ici] (http://stackoverflow.com/a/34995590/2436175). Le fait que vous puissiez utiliser 'find 'comme ça me fait penser que vous avez quelque chose comme [msys] (http://www.mingw.org/wiki/msys) installé. – Antonio
Comme je l'ai mentionné, j'utilise MinGW. J'ai aussi les paquets MSYS installés. –
Comme vous pouvez le voir dans mon commentaire sur la réponse acceptée, j'ai maintenant une solution qui implique des outils Windows standard. –