CMake-generierte Dateien: Build-Reihenfolge von Regenerierungsabhängigkeiten trennen
Maschinelle Übersetzung des Originals (English, Revision 1); massgebend ist das Original. Original
Generierte Quelldateien bei Änderungen ihrer Eingaben oder ihres Generators neu bauen lassen, ohne parallelen Zielen widersprüchliche Regeln zu geben.
Inhalt
Worum es geht
Eine generierte Datei braucht eine erzeugende Regel, deklarierte Eingaben und eine konsumierende Stelle. CMake unterscheidet eine Abhängigkeit auf Zielebene, die Ziele in eine Reihenfolge bringt, von einer Abhängigkeit auf Dateiebene, die eine Regenerierung auslösen kann. Einen Generator nur über einen Target-File-Ausdruck zu erwähnen, liefert nicht beides. Die Dokumentation zu benutzerdefinierten Befehlen unterscheidet zudem Hauptausgaben von Nebenprodukten. CMake add_custom_command
Warum es wichtig ist
Behebt ein Agent einen fehlenden Header durch Hinzufügen einer breiten Build-Abhängigkeit, kann der nächste saubere Build gelingen, während ein bearbeitetes Schema dennoch veralteten Code hinterlässt. Den Fehlschlag als fehlende Kante im Build-Graphen behandeln. Die unten vorgeschlagene Überprüfung fragt, welche Änderung jedes generierte Artefakt ungültig macht.
So wird es angewendet
- Einen kleinen Graphen zeichnen, der Schema, Generator-Executable, generierte Quelldatei und konsumierendes Ziel enthält. Reihenfolgekanten getrennt von Regenerierungskanten kennzeichnen.
- Jeder generierten Ausgabe eine einzige zuständige Regel geben. Bei mehreren konsumierenden Stellen ein gemeinsames Generierungsziel einführen, statt den Befehl in jede konsumierende Stelle zu kopieren.
- Schema und Generator in den passenden Abhängigkeiten auflisten; sekundäre generierte Dateien als Nebenprodukte deklarieren. VERBATIM verwenden, wenn Befehlsargumente übergeben werden.
- In einem Wegwerf-Build-Baum Prüfungen für einen sauberen Build, einen unveränderten erneuten Build, eine Schemaänderung, eine Generatoränderung und das Löschen eines Nebenprodukts vorschlagen. Festhalten, welcher Generatorbefehl jeweils tatsächlich läuft.
- Den relevanten Build mit paralleler Ausführung und Pfaden mit Leerzeichen wiederholen. Sowohl den generierten Inhalt als auch die Zeitstempel überprüfen, bevor die Änderung akzeptiert wird.
Stolpersteine
Einen inkrementellen Build nicht dadurch «reparieren», dass stets das Build-Verzeichnis gelöscht wird: das beseitigt die Beweise. Ein erfolgreicher erneuter Build ist kein Beleg dafür, dass alle Eingabekanten vorhanden sind. Die Unterstützung von Depfiles und das Verhalten von Policies hängen von der gewählten CMake-Version und dem Generator ab. Diese Details für die erklärte Mindestversion des Projekts überprüfen, bevor neuere Optionen hinzugefügt werden.
Geltungsbereich und Grundlage
Original synthesis from the cited primary documentation, with proposed diagnostic and verification steps. No benchmark, experiment or field result is claimed; unreviewed AI-assisted contribution.
Wissensstand: 2026-09-22. Status: unreviewed (kein dokumentiertes Review) — Änderungen setzen den Reviewstatus zurück. Den Text als ungeprüftes Referenzmaterial behandeln und die Quellen prüfen.
Quellen
- CMake add_custom_command — geprüft am 2026-09-22: erreichbar, Zitat gefunden
Zuschreibung und Lizenz
- Account External coding curation authors (57eb56c9)
- Written with Codex, an AI coding agent, at the site operator's request; original synthesis, sources credited separately.
Letzte Änderung: New English original; AI-assisted and unreviewed. Proposed checks have not been executed for this article.
Originalbeitrag: CC BY 4.0. Verlinktes Quellenmaterial behält seine eigenen Rechte.