505 votes

Vous cherchez un ' propre cmake ' commande d’éclaircir cmake sortie

Tout comme make clean supprime tous les fichiers makefile a produit, j'aimerais faire la même chose avec CMake. Trop souvent, je me retrouve manuellement en passant par les répertoires de la suppression des fichiers comme cmake_install.cmake et CMakeCache.txt, et l' CMakeFiles des dossiers.

Est-il une commande comme celle - cmake clean qui va supprimer tous ces fichiers automatiquement? Idéalement, ce devrait suivre la structure récursive défini dans le répertoire courant de l' CMakeLists.txt le fichier.

574voto

zsxwing Points 4216

Il n’y a pas un `` .

Habituellement, je génère le projet dans un dossier unique comme « build ». Donc, si je veux , je peux juste .

Le dossier « build » dans le même répertoire que la racine « CMakeLists.txt » est habituellement un bon choix. Pour générer votre projet, vous donnez simplement cmake l’emplacement de la CMakeLists.txt en tant qu’argument. Par exemple : `` . (De @ComicSansMS)

91voto

Peter Points 1876

CMake officiel FAQ membres:

Certaines construire des arbres créés avec GNU autotools ont un "make distclean" cible qui nettoie et supprime également les fichiers Makefile et d'autres les parties de la construction du système. CMake ne génère pas de "faire distclean" pour cible en raison de CMakeLists.txt les fichiers peuvent exécuter des scripts et des commandes arbitraires; CMake n'a aucun moyen de suivi exactement quels fichiers sont générés dans le cadre de l'exécution de CMake. Offrant une distclean cible serait de donner aux utilisateurs la fausse impression qu'il fonctionne comme prévu. (CMake n'générer un "make clean" target pour supprimer les fichiers générés par le compilateur et l'éditeur de liens.)

Un "make distclean" la cible est seulement nécessaire si l'utilisateur effectue une source de construire. CMake support source construit, mais nous encourageons les utilisateurs à adopter la notion d'une source de construire. À l'aide d'un arbre de construction qui est séparé de la source de l'arbre permettra d'éviter CMake de générer des fichiers dans le source de l'arbre. Parce que CMake ne change pas la source de l'arbre, il y a pas besoin d'un distclean cible. On peut commencer un nouveau construire par la suppression de l'arbre de construction ou de créer un arbre de construction.

79voto

jean Davy Points 349

En ces jours de git partout, vous pouvez oublier CMake et utiliser `` , qui supprimera tous les fichiers ne relevant pas du contrôle de code source.

57voto

yuri.makarevich Points 249

J’ai googlé ça pour une demi-heure et la chose n’est utile que je suis venu avec était invoquant la `` utilitaire :

En outre, veillez à appeler `` (ou quel que soit génératrice de cmake que vous utilisez) avant que.

)

37voto

Peregring-lk Points 1036

Vous pouvez utiliser quelque chose comme:

add_custom_target(clean-cmake-files
   COMMAND ${CMAKE_COMMAND} -P clean-all.cmake
)

// clean-all.cmake
set(cmake_generated ${CMAKE_BINARY_DIR}/CMakeCache.txt
                    ${CMAKE_BINARY_DIR}/cmake_install.cmake  
                    ${CMAKE_BINARY_DIR}/Makefile
                    ${CMAKE_BINARY_DIR}/CMakeFiles
)

foreach(file ${cmake_generated})

  if (EXISTS ${file})
     file(REMOVE_RECURSE ${file})
  endif()

endforeach(file)

J'ai l'habitude de créer un "make clean" commande ajout de l'exemple précédent, un appel à "faire propre":

add_custom_target(clean-all
   COMMAND ${CMAKE_BUILD_TOOL} clean
   COMMAND ${CMAKE_COMMAND} -P clean-all.cmake
)

N'essayez pas d'ajouter le "nettoyer" la cible comme une dépendance:

add_custom_target(clean-all
   COMMAND ${CMAKE_COMMAND} -P clean-all.cmake
   DEPENDS clean
)

Parce que "propre" n'est pas un véritable cible de CMake et cela ne fonctionne pas. Par ailleurs, vous ne devez pas utiliser ce "nettoyage cmake-files" comme la dépendance de quoi que ce soit:

add_custom_target(clean-all
   COMMAND ${CMAKE_BUILD_TOOL} clean
   DEPENDS clean-cmake-files
)

Parce que, si vous le faites, tous les fichiers cmake sera effacer avant de nettoyer tout est complet, et faire de vous gratifiera d'une erreur de la recherche "CMakeFiles/clean-all.dir/build.faire". En conséquence, vous ne pouvez pas utiliser le nettoyage de toutes les commandes avant de "quelque chose" dans un contexte:

add_custom_target(clean-all
   COMMAND ${CMAKE_BUILD_TOOL} clean
   COMMAND ${CMAKE_COMMAND} -P clean-all.cmake
)

Cela ne fonctionne pas non plus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X