Wie kann ich feststellen, wo g ++ eine Include-Datei finden konnte? Grundsätzlich wenn ich
#include <foo.h>
g ++ scannt den Suchpfad und verwendet alle Include-Optionen, um den Pfad hinzuzufügen oder zu ändern. Aber gibt es am Ende der Tage eine Möglichkeit, den absoluten Pfad von foo.h zu bestimmen, den g ++ zum Kompilieren ausgewählt hat? Besonders relevant, wenn es in den unzähligen Suchpfaden mehr als ein foo.h gibt.
Kurz bevor dies erreicht werden kann ... gibt es eine Möglichkeit, g ++ dazu zu bringen, mir zu sagen, wie der endgültige Suchpfad nach dem Einbeziehen von Standardeinstellungen und allen Include-Optionen lautet?
Antworten:
Dies gibt make-Abhängigkeiten, in denen die absoluten Pfade der Include-Dateien aufgelistet sind:
Wenn Sie nicht möchten, dass das System enthält (dh
#include <something.h>
), verwenden Sie:quelle
druckt auch den vollständigen Pfad der Include-Dateien in einem Format, das anzeigt, welcher Header welche enthält
quelle
clang++ -MM -H
(was eine etwas nützliche Kombination ist).clang++ -H -fsyntax-only ...
Sie diese Option, wenn Sie das Generieren von Ausgabedateien vermeiden möchten (funktioniert auch fürgcc
).Sicher verwenden
quelle
Wenn Sie
-MM
oder eine der zugehörigen Optionen (-M
usw.) verwenden, erhalten Sie nur die Liste der enthaltenen Header, ohne alle anderen Präprozessorausgaben (die Sie mit der vorgeschlageneng++ -E -dI
Lösung zu erhalten scheinen ).quelle
g++ -MM t.cc
zeigt überhaupt keine Inklusion, nurt.o: t.cc
. Braucht es noch etwas?/showIncludes
. MSVC wird sogar einrücken, um Ihnen die Verschachtelung von Headern zu zeigen (das sehe ich bei-M
GCC nicht).