2016-03-30 6 views
0

Ich möchte die Ausführungsreihenfolge von Geschwisterabhängigkeiten erzwingen. Nehmen wir an, wir die folgenden Top-Level-Ziele haben:CMake: Ausführungsreihenfolge zwischen Geschwisterzielabhängigkeiten erzwingen

add_custom_target(test_all) 
add_custom_target(test_coverage) 
add_custom_target(test_coverage_zero) 
add_custom_target(test_coverage_collect) 

I test_all bin mit Unit-Tests ausführen (und möglicherweise bauen sie und ihre Abhängigkeiten). test_coverage sollte test_coverage_zero, dann test_all und schließlich test_coverage_collect ausführen. test_coverage_zero wird verbleibende Überdeckungsdaten von einem vorherigen Lauf von test_all bereinigen, während test_coverage_collect die aktuellen Überdeckungsdaten verwendet und eine Art menschenlesbare Ausgabe erzeugt. Der Grund für dieses Setup ist, dass test_all ohne tatsächliche Coverage-Datenverarbeitung ausgeführt werden darf. Auf der anderen Seite muss test_coveragetest_all ausführen, um Coverage-Daten zu erzeugen.

[Detail. Ich bin gcov/lcov für die Berichterstattung Daten und hinzugefügt benutzerdefinierte Befehle zu test_coverage_zero und test_coverage_collect für die eigentliche Verarbeitung]

Ich habe die folgenden Abhängigkeiten Setup dieses Verhalten zu erreichen:

add_dependencies(test_coverage test_coverage_zero test_all test_coverage_collect) 

, das nicht funktioniert. Die tatsächliche Ausführungsreihenfolge lautet test_all, test_coverage_zero und test_coverage_collect, wodurch die Überdeckungsdaten vor dem Erfassungsschritt entfernt werden.

Meine Frage: Wie erzwinge ich die Reihenfolge der Zielabhängigkeiten (auf der Ebene der Geschwister) in CMake?

+0

Zusätzliche Abhängigkeiten zwischen den Geschwistern hinzufügen? – usr1234567

+0

@ usr1234567: ausprobiert, scheint nicht zu funktionieren – regnirpsj

+0

Können Sie bitte die tatsächlichen 'COMMAND' Teile für Ihre Ziele geben? Ich glaube nicht, dass Sie die Ziele "test_coverage_zero" und "test_coverage_collect" brauchen, wenn Sie mit ['add_custom_command()'] arbeiten (https://cmake.org/cmake/help/v3.3/command) /add_custom_command.html) ruft auf und gibt die korrekten 'OUTPUT'- und' DEPENDS' -Dateien. – Florian

Antwort

0

Sieht aus wie die Antwort lautet:

add_dependencies(test_all    test_coverage_zero) 
add_dependencies(test_coverage_collect test_all) 
add_dependencies(test_coverage   test_coverage_zero test_all test_coverage_collect) 

jedoch wird nicht funktionieren entweder test_coverage_zero oder test_all aus der letzten Abhängigkeit entfernt auch, obwohl es test_coverage < eine klare Abhängigkeitskette ist - test_coverage_collect <-test_all <-test_coverage_zero .

Verwandte Themen