führen Sie einen shell-Befehl (ctags) in cmake und make
Ich bin Codierung eines c++ - Projekt in vim.
Ich würde gerne eine ctags
Befehl (ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
) erzeugen Verweise, wenn ich laufen machen.
Ich denke, die Art und Weise, es zu tun, ist die Verwendung add_custom_command
aber ich verwirrt, wie integrieren Sie ihn in CMakeLists.txt .
- Ich bin nicht die Prüfung diese Antworten nicht mehr. ctags Zeit nimmt, auf meinem ultra-low-power-i5, also ich nenne es einfach aus vim einmal in eine Weile.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den einfachsten Weg, dies zu tun ist:
Die erste Zeile sagt
CMake
dasstags
generiert werden. Dieadd_custom_command
istCMake
generierttags
wenn nötig, und schließlich, einige Gegner muss hängttags
. Das Standard-Arbeitsverzeichnis ist in der build-Baum, soWORKING_DIRECTORY
muss festgelegt werden, um deinen source-tree. Dies entspricht einem Makefile Eintrag:CMAKE_SOURCE_DIR
ist standardmäßig angegeben. Ich brauche nicht zu geben. richtig?CMAKE_SOURCE_DIR
wird automatisch in der aktuell source-Verzeichnis (kann ein Unterverzeichnis, wenn Sie rekursiv hinzufügen von Quellcode-Dateien).CMAKE_SOURCE_DIR
ist in der Regel das Verzeichnis, in dem dieCMakeLists.txt
- Datei befindet.set_source_files_properties(tags PROPERTIES GENERATED true)
ist redundant. Zitat vonCMake
Dokumentation:OUTPUT
: (...) Jede Ausgabe-Datei wird markiert, mit derGENERATED
- source-Datei-Eigenschaft automatisch.Neue Lösung:
Ich denke, CMake geändert seit der letzten Antwort wurde gegeben.
Hier ist die Zeilen habe ich Hinzugefügt in meine CMakeLists.txt (getestet mit der version 2.8.12):
Und es funktioniert perfekt jetzt!
Daniel ' s und Knarren die Antworten, hab mir begonnen, aber ich landete mit einer komplexeren Lösung, die ich dachte, ich würde Aktie:
Es mehrere Dinge, die einfachere Lösungen nicht:
Er fügt lediglich die "tags" als eine Abhängigkeit von der primären build-Produkt (
MyProject
) wenn es tatsächlich einectags
Programm auf dem system. Wir wollen nicht zu brechen, die bauen, nur weil dieses Windows ist, oder weilctags
einfach noch nicht installiert wurde, noch auf das build-system.Extrahiert Symbole aus dem Quellcode-Dateien in beiden build-und source-Verzeichnissen. Das geht in ein paar Fällen.
Erste, Sie könnten mit
configure_file()
und kommen aus einem Autotools-hintergrund, so dass Sie genannt habe die wahre Quelle deiner Dateien*.in
, was bedeutet, dassctags -R
nicht Scannen. Sie benötigen, Scannen Sie den erzeugten Versionen im build-Verzeichnis. Zum Beispiel, haben Sie vielleichtsrc/mainheader.h.in
in deinem source-tree, mit dem Projekt-Versionsnummer automatisch subbed in es alsbuild/src/mainheader.h
.Zweite, etwas von Ihrem "Quell" - Dateien erzeugt werden könnte, die von anderen tools. In meinem aktuellen Projekt habe ich ein paar C++ - header-Dateien, die generiert werden durch Perl-Skripte. Ich möchte die Symbole sowohl die generierte Header und die Perl-Skripte in die tags-Datei.
Er arbeitet in einem Unterverzeichnis.
In dem Projekt arbeite ich jetzt auf der rechten Seite, die primären build-Produkt ist aus
src/*
relativ zur Projekt-root, und ich möchte nur die Symbole aus, dass die Teilstruktur in der tags-Datei. Ich will nicht, dass Sie enthalten Symbole aus der unit-tests, Beispiele, oder das Dienstprogramm-Skripten.Weil es wurde entwickelt, um laufen in einem Unterverzeichnis, es erstellt einen symbolischen Link auf das
src/tags
Datei in der Spitze des build-directory, so dassvi -t TagName
funktioniert. (Ich gehe davon aus, dass hier, wennctags
existiert,ln
auch so sieht.)