Ich möchte ein Testziel hinzufügen, das vom gesamten erfolgreich erstellten Projekt abhängig ist, ohne Abhängigkeiten für alle Bibliotheken oder ausführbaren Dateien neu festzulegen.
Ich würde dies in make schreiben als:
%Vor%test.sh verwendet implizit foo und bar und möchte, dass sie auf dem neuesten Stand sind.
So würde ich dies in cmake angeben.
%Vor%Dies funktioniert jedoch nicht, da es kein vollständiges Ziel gibt.
Gibt es eine Möglichkeit, dies zu spezifizieren? Oder gibt es eine Variable, die auf alle Ziele erweitert wird, die ich erstellen möchte?
Ab Version 2.8 bietet CMake keine Variable, die eine Liste aller Ziele enthält. Das Beste, was Sie tun können, ist, die integrierten Befehle add_library
und add_executable
mit benutzerdefinierten Makros zu überschreiben, die die eingebauten Makros aufrufen und alle definierten Ziele in einer Variablen verfolgen.
Sie können sogar dieselben Namen für Ihre benutzerdefinierten Makros verwenden. Auf diese Weise müssen Sie nicht alle bestehenden Aufrufe add_library
und add_executable
ändern. Den ursprünglichen integrierten Befehlen wird ein Unterstrich vorangestellt, wenn Sie einen davon überschreiben:
Beachten Sie auch, dass Sie mit der Option DEPENDS
keine Zielabhängigkeit zu einem benutzerdefinierten Ziel hinzufügen können. DEPENDS
verweist möglicherweise nur auf vorhandene Dateien oder Dateien, die mit add_custom_command(...)
im selben Verzeichnis erstellt wurden. Um eine Zielabhängigkeit hinzuzufügen, verwenden Sie stattdessen den Befehl add_dependencies
.
Ich habe nicht genug Reputation, um Sakra zu antworten ...
Ein Problem mit dieser Lösung ist, dass wenn Sie ein Unterverzeichnis verwenden, die Änderungen, die Sie an der Variable _allTargets im Unterverzeichnis vornehmen, nicht an den übergeordneten Bereich weitergegeben werden.
Digging mehr, Liste (append ...) kann nicht in diesem Fall verwendet werden:
Ähnlich wie der SET-Befehl erstellt der LIST-Befehl eine neue Variable Werte im aktuellen Bereich, auch wenn die Liste selbst tatsächlich ist in einem übergeordneten Bereich definiert. Um die Ergebnisse dieser zu verbreiten Operationen nach oben, verwenden Sie SET mit PARENT_SCOPE, SET mit CACHE INTERN, oder andere Mittel der Wertverbreitung.
Ссылка :
Wenn PARENT_SCOPE vorhanden ist, wird die Variable im Bereich festgelegt über dem aktuellen Umfang. Jedes neue Verzeichnis oder jede neue Funktion erstellt ein neuer Umfang Dieser Befehl setzt den Wert einer Variablen in die übergeordnetes Verzeichnis oder aufrufende Funktion (je nachdem, was für die Fall zur Hand).
(Hinweis für mich selbst: Ein Makro ist nicht eine Funktion)
Ich sehe keine allgemeine Lösung (z. B. unabhängig von der Verwendung von add_subdirectory), wenn PARENT_SCOPE verwendet wird. Hier scheint es jedoch eine Lösung mit CACHE INTERNAL zu geben.
Zitieren von: Ссылка
%Vor%Sie können CTest verwenden:
%Vor%Cmake erzeugt Makefile mit neuem Ziel test , siehe auch: Dokumentation für den Befehl add_test .
Aber Sie müssen Ihr Projekt kompilieren, bevor Sie Tests ausführen:
%Vor%Sie können auch das Ziel Experimentell , Nächtlich oder Kontinuierlich verwenden. Diese Ziele kompilieren das Projekt und führen alle Tests aus, aber sie versuchen auch, Testergebnisse zu senden (Sie können es mit CTestConfig.cmake konfigurieren).
Tags und Links cmake