Ich habe ein CMake-Projekt mit vielen Teilprojekten. Jede von ihnen kann eine Funktion verwenden, die ich zur Verfügung stelle, um eine kleine Textdatei mit bestimmten Informationen zu generieren (durch Aufruf von add_custom_command). Im letzten Schritt möchte ich alle diese Dateien in einer großen Textdatei kombinieren.CMake: Hinzufügen von Abhängigkeit add_custom_command dynamisch
Ich habe einen benutzerdefinierten Befehl erstellt, der nach erstellten Dateien (alle an einem Ort) sucht und sie zusammenführt.
Das Problem ist, dass ich diesen letzten Schritt abhängig von allen kleinen Schritten in Teilprojekten machen möchte, während ich eigentlich nicht weiß, wie viele Dateien zur Verfügung gestellt werden.
Meine letzte Befehl wie folgt aussieht:
add_custom_command(OUTPUT combination.txt
COMMAND create combination.txt from all files from /path/)
und meine create-small-Text-Datei-für-jeden-Teilprojekt wie Befehl aussieht:
add_custom_command(OUTPUT /path/${sub_project_name}.txt
COMMAND create /path/${sub_project_name}.txt)
Und wenn ich schaffen die kleinen Dateien ich möchte etwas zu tun, wie „combination.txt“ hängen
Also auf /path/${sub_project_name}.txt machen wünschte, ich könnte ich:
add_dependency(combination.txt /path/${sub_project_name}.txt)
Dies funktioniert jedoch nur für Ziele.
Ich habe auch versucht set_source_files_properties mit OBJECT_DEPENDS zu verwenden, aber es scheint nicht zu funktionieren (seine vielleicht die Absicht, mit add_target CPP-Dateien verwendet werden?)
Der letzte Weg ist, um es Arbeit zu bekommen ich sehe, eine Cache-Variable zu verwenden, die alle diese kleinen Dateien Pfade ansammeln würden und es dann wie folgt verwenden:
add_custom_command(OUTPUT combination.txt
COMMAND create combination.txt from all files from /path/
DEPENDS ${all_small_files_list})
aber das ist das letzte, was ich tun möchte.
Es wird funktionieren, aber nicht genau wie erwartet: Jedes Mal, wenn ich make aufrufen, werden alle Ziele (Kombination, Projekt und Projekt2) neu aufgebaut - so werden die Dateien neu generiert. Das ist nicht so schön wie es sein könnte;) Das erwartete Verhalten für mich ist, keine Dateien neu zu generieren, es sei denn, es ist notwendig. Nach CMake-Dokumenten - add_custom_target wird jedes Mal erstellt. Ich wünschte, ich hätte eine Lösung, die als add_custom_command funktioniert - die nur erstellt wird, wenn sich die Abhängigkeit geändert hat. –
Was verwenden Sie als Abhängigkeit, um project.txt zu generieren? Ich denke, was der CMake-Doc sagen will ist, dass ein custom_target immer überprüft wird, ob es neu erstellt werden muss oder nicht - zumindest scheint es so zu funktionieren. –
Nun, nachdem ich richtig gelesen habe, wie wir es machen, muss ich zugeben, dass ich zu früh war. Siehe mein Update der Antwort. –