2016-09-26 4 views
0

Ich benutze Ubuntu Linux.Laufendes cscope von CMake zum Zeitpunkt der Erstellung

Ich habe versucht, den folgenden Befehl cscope ausführen zu lassen, wenn ich "make" aus meinem Projektverzeichnis ausführen, so dass es cscope neu kompiliert und aktualisierte Namensinformationen erhält, wenn ich mein Projekt mache.

cscope -b -q -U -R

Per meine Forschung und ein wenig lesen, sollte ich in der Lage sein CMake zu bekommen, einen Befehl auszuführen, wenn Sie ‚make‘ durch die add_custom_command Funktion in CMakeLists.txt verwenden.

Allerdings waren viele Versuche und Variationen davon nicht erfolgreich. Ist es möglich, dies mit add_custom_command so auszuführen, wie ich es möchte?

einfach scheint dies zu tun, nicht zu arbeiten:

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cscope.in.out ${CMAKE_CURRENT_BINARY_DIR}/cscope.out ${CMAKE_CURRENT_BINARY_DIR}/cscope.po.out COMMAND cscope -b -q -U -R)

I als auch die TARGET Überlastung von add_custom_command verwendet hat versucht, und ein eigenes Ziel mit einer Abhängigkeit zu machen auf beide ALL oder Haupt Ausgabedatei des Projekts, aber das tut auch nichts.

Idealerweise würde dies laufen, nachdem das Projekt gebaut wurde, wenn mir sagen könnte, was ich falsch mache oder wenn dies der Weg ist, wäre ich dankbar dafür?

+1

'add_custom_command' ist nutzlos, bis ein ** Ziel ** von der Datei abhängt, die der Befehl erzeugt. – Tsyvarev

+0

Haben Sie tatsächlich die neueste ['add_custom_command'-Dokumentation] (https://cmake.org/cmake/help/latest/command/add_custom_command.html) überprüft? – Antonio

Antwort

2

Ich habe versucht, auch die TARGET Überlastung von add_custom_command verwenden und ein benutzerdefinierten Ziel mit einer Abhängigkeit zu machen auf beide ALL oder Hauptausgabedatei des Projektes, aber das alles entweder nicht tun.

Dies scheint das Problem zu sein - wenn ein CMake Befehl erfordert ein Ziel weitergegeben werden, beziehen sie sich auf den Namen eines Ziels, das Sie zuvor erstellt haben, durch ein add_executable, add_library oder add_custom_target verwenden, die entspricht nicht unbedingt einer tatsächlichen Artefaktdatei, die vom Befehl generiert wird.

Hier ist meine Sicht auf das Problem, und es scheint, die drei Cscope-Dateien im Build-Verzeichnis zu generieren.

cmake_minimum_required(VERSION 3.3 FATAL_ERROR) 
project(te) 

add_executable(main main.cpp asdf.cpp) 
add_custom_command(TARGET main POST_BUILD COMMAND cscope -b -q -U -R) 

Hinweis hier, dass der Name des Ziel hier ist, was ich als erstes Argument an die add_executable Befehl übergeben habe.

+0

Dies ist die richtige Antwort, solange 'POST_BUILD' akzeptabel ist. Andernfalls wird ein Ziel, das von einer der OUTPUT-Dateien von add_custom_command abhängig ist, den Befehl auslösen, bevor es erstellt wird. – Antonio

Verwandte Themen