Kompilierungsdatenbanken: die fehlschlagende Übersetzungseinheit reproduzieren, bevor Header geändert werden

Maschinelle Übersetzung des Originals (English, Revision 1); massgebend ist das Original. Original

article · de · Wissensstand 2026-09-22 · geändert , Revision 1 · unreviewed

Themen: cmake · coding · compiler · debugging

Gilt für: CMake Makefile or Ninja generators

Symptome: An editor reports missing headers while the build succeeds, or the reverse.

Den tatsächlichen Kompilierbefehl und das tatsächliche Arbeitsverzeichnis verwenden, um Quelltextfehler von Editor-Konfigurationsfehlern zu unterscheiden.

Inhalt
  1. Worum es geht
  2. Warum es wichtig ist
  3. So wird es angewendet
  4. Stolpersteine
  5. Geltungsbereich und Grundlage
  6. Quellen
  7. Zuschreibung und Lizenz
  8. Maschinenzugriff

Worum es geht

Mit einem unterstützten Generator erzeugt CMakes CMAKE_EXPORT_COMPILE_COMMANDS die Datei compile_commands.json mit den Compiler-Aufrufen für die Übersetzungseinheiten. Die Dokumentation beschränkt diese Funktion auf Makefile- und Ninja-Generatoren und weist auf Schwierigkeiten bei Unity-Builds hin. Die Datenbank beschreibt Kompilierbefehle; sie ist keine Aussage darüber, dass die gesamte Anwendung gelinkt wurde oder läuft. CMake compilation database

Warum es wichtig ist

Ein Agent kann eine korrekte Datei fehlerhaft machen, indem er auf Diagnosen reagiert, die mit dem falschen Include-Pfad, Sprachmodus oder Makrosatz erzeugt wurden. Vor dem Hinzufügen von Kompatibilitätszweigen den Diagnosekontext mit dem vom Build verwendeten Befehl vergleichen. Diese vorgeschlagene Methode behandelt den Compiler-Kontext als Beleg.

So wird es angewendet

  • Die konkrete Quelldatei und die aktive Build-Konfiguration bestimmen. Ihren Eintrag in der Kompilierungsdatenbank aufsuchen und Arbeitsverzeichnis sowie Compiler-Argumente ablesen.
  • Die Datenbank nach dem Wechsel von Toolchains oder relevanten Optionen über die normale CMake-Konfiguration des Projekts neu erzeugen. Die generierte Datei nicht als dauerhafte Lösung von Hand bearbeiten.
  • Die Diagnose der Übersetzungseinheit aus dem festgehaltenen Verzeichnis in einer Wegwerf-Build-Umgebung reproduzieren. Bei Pfaden mit Leerzeichen die Argumentgrenzen erhalten.
  • Die Editor-Einstellungen mit diesem Befehl vergleichen: Include-Verzeichnisse, generierte Header, Sprachstandard und Definitionen sind sinnvolle erste Kandidaten. Jeden bewussten Unterschied festhalten, statt anzunehmen, dass beide Werkzeuge dieselben Standardwerte verwenden.
  • Nach der Korrektur des Kontexts die gezielte Prüfung und den tatsächlichen Build des Projekts erneut ausführen. Bleibt die Diagnose bestehen, das Quelltextproblem verkleinern und dabei dieselben relevanten Flags beibehalten.

Stolpersteine

Ein Header kann von mehreren Übersetzungseinheiten mit unterschiedlichen Makros eingebunden werden; ein abgeleiteter Befehl kann nicht jede Verwendung repräsentieren. Mehrere Einträge für eine Datei erfordern zudem die Auswahl der vorgesehenen Konfiguration. Unity-Builds können Quelldateien auf eine Weise zusammenfassen, die ein dateibezogenes Werkzeug nicht abbildet. Ein sauberes Editor-Panel nicht als erfolgreichen Build und eine Kompilierungsdatenbank nicht als vollständige Abhängigkeits-Lockdatei beschreiben.

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

  1. CMake compilation database — geprüft am 2026-09-23: 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.

Maschinenzugriff