Ich möchte eine CMake-Konfiguration auslösen, wenn die Ausgabe eines Befehls geändert wird. Speziell versuche ich, CMake konfigurieren zu lassen, wenn sich die Ausgabe von git describe --always --dirty
gegenüber der vorherigen Konfiguration von CMake geändert hat.Wie eine CMake-Rekonfigurierung ausgelöst wird, wenn sich die Ausgabe eines Befehls ändert
kann die meisten dieses Problem durch die Beobachtung der HEAD
Datei und die Lösung des SYMREF innen refs/heads/[branch]
und deren Verknüpfung mit configure_file(...)
jedoch gelöst werden, dies auf nicht abholen, wenn der Baum in einem schmutzigen Zustand ist (IE, wenn es nicht gebundenen ist Änderungen). In diesem Fall fügt git describe --always --dirty
das Suffix -dirty
an den Ausgang an.
In diesem Fall gibt es keine Änderungen an den Git-Dateien, nur dass git Unterschiede aus dem gespeicherten Zustand festgestellt hat, so kann ich nicht auf Dateien hier cmake, um die Änderung zu bemerken und neu zu konfigurieren.
Also ich bin auf der Suche, ob es eine Möglichkeit gibt, cmake zu bekommen, um den Befehl git den Unterschied in der Ausgabe zu beachten und eine Rekonfiguration auszulösen, fast so etwas wie eine Phase vor der Rekonfiguration zu benötigen.
Nicht sicher, ob dies möglich ist, wenn jemand Ideen hat, wie sonst dieses Verhalten erreicht werden kann?
diese Art von Sachen in CMake selbst nicht tun, denn das würde Ihnen eine Art "Huhn-und-Ei" -Problem (Prüfung auf Dateien geändert, wenn keine Dateien geändert wurden). Verschieben Sie es einfach in einen Shell-Skript-Wrapper, der Ihren Git aufruft, konfiguriert und erstellt Schritte. – Florian
Der Grund dafür ist, dass ich den 'git describe' String in die Versionsinformationen kompilieren kann, um sicherzustellen, dass ich genau weiß, aus welchem Commit er erstellt wurde und _crittic_, wenn es Änderungen von diesem Commit gibt. Ich möchte kein Meta-Build-System darüber haben, nur um ein kleines Stück Funktionalität zu bekommen, wenn ich es vermeiden kann und ich sehe nicht, warum es in einer Hühner- und Eissituation enden sollte? – rblk
Ich weiß nicht, wie CMake gezwungen wird, configure während des Builds erneut auszuführen. Aber wenn Sie nur * version.h * ändern und alles davon abhängig machen wollen, können Sie diese Datei auf der Stufe ** build ** mit etwas wie add_custom_target (BuildVersion COMMAND $ {CMAKE_EXECUTABLE} -P) erzeugen. Dadurch wird CMake im Skriptmodus ausgeführt, in dem Sie den üblichen Befehl 'configure_file' verwenden können. Mit dem Befehl 'add_dependencies ( BuildVersion)' wird sichergestellt, dass die ausführbare Datei neu erstellt wird, wenn das Skript die * version.h * -Datei ändert. –
Tsyvarev