Wenn ich eine sehr einfache Quelldatei mit gcc kompiliere, muss ich nicht den Pfad zu Standard-Include-Dateien wie stdio oder stdlib angeben.
Woher weiß GCC, wie man diese Dateien findet?
Ist der /usr/include
Pfad fest verdrahtet, oder werden die Pfade von anderen Betriebssystemkomponenten abgerufen?
cpp -v /dev/null -o /dev/null
Es gibt einen Befehl mit einer kürzeren Ausgabe, mit dem die Include-Pfade automatisch aus Zeilen ausgeschnitten werden können, beginnend mit einem einzelnen Leerzeichen:
Das Guthaben geht an die libc ++ - Startseite .
quelle
Obwohl ich der Antwort von Ihor Kaharlichenko für die Berücksichtigung von C ++ und der Antwort von abyss.7 für die Kompaktheit der Ausgabe zustimme, sind sie für die Multi-Arch-Versionen von gcc immer noch unvollständig, da die Eingabeverarbeitung von den Befehlszeilenparametern und Makros abhängt.
Beispiel:
echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -specs=nano.specs -mcpu=cortex-m4 -march=armv7e-m -mthumb -mfloat-abi=soft -x c++ -E -Wp,-v\ - -fsyntax-only
ergibtwährend
echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -x c++ -E -Wp,-v - -fsyntax-only
ergibtDer erstere Aufruf verwendet
newlib
(siehe Zeilen 1 und 3 der Ausgabe), der letztere gehört zu den Standard-Includes. Die allgemeinen Dateien am Ende der Liste sind ein Beispiel für die Verwendung voninclude_next
.Fazit: Berücksichtigen Sie beim Drucken der Include-Verzeichnisse immer alle Makros und Compiler-Optionen .
quelle
Führen Sie einfach Folgendes aus, um die Standardsuchpfade aufzulisten:
quelle
cc1
kann normalerweise nicht direkt aufgerufen werden, da es sich um einen internen Befehl handelt, der sich nicht im PATH befindet. Vielleicht möchten Sie Ihre Antwort bearbeiten, um zu beschreiben, wo sich die Datei befindet.