exécuter une commande shell (ctags) dans cmake et faire
Je suis le codage d'un projet c++ dans vim.
Je voudrais un ctags
de commande (ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
) pour générer des références quand je lance le faire.
Je pense que la façon de le faire est d'utiliser add_custom_command
mais je vous confus sur la façon de l'intégrer dans CMakeLists.txt .
- Je ne suis pas le test de ces réponses plus. ctags prend du temps sur mon ultra faible puissance i5 donc je viens de l'appeler à partir de vim une fois dans un certain temps.
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple de le faire est:
La première ligne indique à
CMake
quetags
sera généré. Leadd_custom_command
estCMake
va générertags
si nécessaire, et enfin, certains ciblent les besoins dépendenttags
. Le répertoire de travail par défaut est dans l'arbre de construction, de sorteWORKING_DIRECTORY
doit être réglé à votre arborescence des sources. C'est l'équivalent d'un Makefile entrée:CMAKE_SOURCE_DIR
est spécifié par défaut. Je n'ai pas besoin de le spécifier. droit?CMAKE_SOURCE_DIR
est automatiquement réglé sur le courant répertoire source (peut être un sous-répertoire, si vous êtes de manière récursive l'ajout de fichiers source).CMAKE_SOURCE_DIR
est généralement le répertoire où leCMakeLists.txt
fichier se trouve.set_source_files_properties(tags PROPERTIES GENERATED true)
est redondant. Citation deCMake
de la documentation:OUTPUT
: (...) Chaque fichier de sortie sera marqué par l'GENERATED
fichier source de la propriété automatiquement.Nouvelle solution:
Je pense que CMake changé depuis la dernière réponse a été donnée.
Voici les lignes que j'ai ajouté dans mon CMakeLists.txt (testé avec la version 2.8.12):
Et cela fonctionne parfaitement maintenant!
De Daniel et de Craquer réponses m'ont commencé, mais je me suis retrouvé avec de plus en plus complexes, la solution que j'ai pensé partager:
Il n'plusieurs choses que la plus simple des solutions à ne pas faire:
Il ajoute que "tags" comme une dépendance de la primaire de construction (
MyProject
) si il est en fait unctags
programme sur le système. Nous ne voulons pas casser le build juste parce que c'est Windows, ou parce quectags
n'a pas encore été installé sur le système de compilation.Il extrait les symboles de la source dans les fichiers de construire et de répertoires source. C'est important dans un couple de cas.
Tout d'abord, vous utilisez peut-être
configure_file()
et Autotools arrière-plan, de sorte que vous avez nommé votre véritable source des fichiers*.in
, ce qui signifiectags -R
de ne pas les analyser. Vous avez besoin de numériser l'généré versions dans le répertoire build. Par exemple, vous pourriez avoirsrc/mainheader.h.in
dans votre arborescence des sources, avec le projet numéro de version automatiquement remplacé en elle commebuild/src/mainheader.h
.Deuxièmement, certains de vos fichiers "sources" pourraient être générées par d'autres outils. Dans mon projet actuel, j'ai un couple de C++ en-tête des fichiers qui sont générés par des scripts Perl. Je veux symboles à la fois générées, les en-têtes de et les scripts Perl dans le fichier de tags.
Il travaille dans un sous-répertoire.
Dans le projet sur lequel je travaille en ce moment, le principal construire le produit est fabriqué à partir de
src/*
par rapport à la racine du projet, et je veux seulement des symboles à partir de ce sous-arbre dans le fichier de tags. Je ne veux pas d'y inclure les symboles de l'unité, les tests, les exemples, ou l'utilitaire de scripts.Car il est conçu pour fonctionner dans un sous-répertoire, il crée un lien symbolique vers le
src/tags
fichier dans le haut du répertoire de construction, de sorte quevi -t TagName
œuvres. (Je suppose ici que sictags
existe,ln
n', trop.)