Ich habe ein Archiv mit dem gcc-Infohandbuch heruntergeladen voneine offizielle Seite. Das Extrahieren des Archivs führt nicht zu einer einzelnen .texi-Datei, sondern zu einer sehr komplexen Verzeichnisstruktur mit vielen, vielen .texi-Dateien. Ich bin nicht sicher, wie ich diese tatsächlich in eine einzelne .info-Datei umwandeln kann (damit ich diese in mein Emacs-Info-Verzeichnis /usr/share/info installieren kann, ich weiß, wie das geht).
Es ist mir völlig unklar, wie ich aus diesem Verzeichnis mit den vielen vielen .texi-Dateien eine .info-Datei bekomme. Vom entpackten obersten Verzeichnis aus bin ich zu gcc/doc gegangen und habe dort (neben etwa 30 anderen .texi-Dateien) eine Datei namens gcc.texi gefunden. Beim Versuch makeinfo gcc.texi
wurde das bemängelt gcc.texi:25: @include: could not find gcc-common.texi
, obwohl sich die Datei in gcc/doc/include befindet.
Welchen Befehl muss ich zum Erstellen verwenden?
Antwort1
Ich glaube nicht, dass es eine einfache und unkomplizierte Möglichkeit gibt, nur den gewünschten Code zu extrahieren und ihn dann unabhängig davon auszuführen Makefile
(der generiert wird, Makefile.in
wenn Sie ./configure
usw. ausführen, um das gesamte GCC-Paket zu erstellen). Wenn Sie wirklich lokal erstellen müssen, befolgen Sie die Standard-Build-Anweisungen des Pakets.
Um etwas genauer zu werden:Makefile.in
enthält die folgenden Ausschnitte;
info: do-info
# Make sure makeinfo is built before we do a `make info', if we're
# in fact building texinfo.
do-info: maybe-all-texinfo
install-info: do-install-info dir.info
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
if [ -f dir.info ]; then \
$(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info; \
else true; fi
#...
.PHONY: all-texinfo maybe-all-texinfo
maybe-all-texinfo:
@if gcc-bootstrap
all-texinfo: stage_current
@endif gcc-bootstrap
@if texinfo
TARGET-texinfo=all
maybe-all-texinfo: all-texinfo
all-texinfo: configure-texinfo
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(HOST_EXPORTS) \
(cd $(HOST_SUBDIR)/texinfo && \
$(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(STAGE1_FLAGS_TO_PASS) \
$(TARGET-texinfo))
@endif texinfo
#...
.PHONY: do-install-info
do-install-info:
@: $(MAKE); $(unstage)
@r=`${PWD_COMMAND}`; export r; \
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
$(MAKE) $(RECURSE_FLAGS_TO_PASS) install-info-host \
install-info-target
.PHONY: install-info-host
install-info-host: maybe-install-info-bfd
install-info-host: maybe-install-info-opcodes
install-info-host: maybe-install-info-binutils
install-info-host: maybe-install-info-bison
Die Definition geht mit einer sehr langen Liste einzelner Ziele weiter, die ich nicht bis zum Ende durchgearbeitet habe.
Antwort2
OP hier, hier ist ein Hack, der das Problem löst, zumindest für die Version 8.3.0 der eigenständigen Texinfo-Quellen, die über den Link im OP heruntergeladen wurden:
Kurz zusammengefasst:
Schritt 1: Öffnen Sie in dem docs
Ordner, der enthält gcc.texi
, die Datei install.texi2html
mit einem Texteditor und entfernen Sie die letzte Zeile mit dem Inhalt rm $DESTDIR/gcc-vers.texi
.
Schritt 2: Führen Sie das Skript mit `./install.texi2html aus
Schritt 3: Ausführenmakeinfo gcc.texi -P ./HTML -P ./include
Schritt 4: Lesen Sie das Handbuch mit info gcc.info
oder von Emacs aus C-u F1 i
.path/to/gcc.info
Erläuterung:
es scheint, dass das Problem darin besteht, dass die eigenständigen Texinfo-Quellen-Tarballs auf dergcc onlinedocs-Seiteenthalten keine Makefiles. Es scheint, dass sich die gcc-Betreuer einfach nicht allzu viele Gedanken darüber gemacht haben, wie einfach die Kompilierung der eigenständigen Info-Handbücher sein kann.
Hier ist ein Hack, um es zum Laufen zu bringen (bei mir hat das mit den Texinfo-Quellen von gcc 8.3 funktioniert):
Gehen Sie zunächst gcc/gcc/docs
dorthin, wo wir das Archiv entpackt haben. Wir sehen gcc.texi
, ein Verzeichnis namens include
, und einige andere .texi
Dateien. Wenn wir dies jetzt versuchen würden makeinfo gcc.texi
, würden wir viele Beschwerden über Dinge wie „ gcc-common.texi
nicht gefunden“ erhalten. Diese fehlenden Dateien befinden sich zufällig im include
Verzeichnis, also fügen wir es dem Suchpfad mit der -P
Option hinzu:
makeinfo gcc.texi -P ./include
Wir erhalten jedoch eine Beschwerde über ein fehlendes gcc-vers.info
. Diese Datei ist nirgends zu finden, sollte aber automatisch generiert werden, autogen
wenn der vollständige GCC-Quellcodebaum (nicht nur die Texi-Quellen) konfiguriert und erstellt wird. Wir haben jedoch Glück, denn im selben Verzeichnis wie gcc.texi
gibt es ein Skript namens install.texi2html
. Am Ende des Skripts sehen wir die Zeile:
rm $DESTDIR/gcc-vers.texi
Das bedeutet, dass das Skript tatsächlich die benötigte Datei generiert, sie dann aber löscht. Entfernen Sie daher einfach diese Zeile aus dem Skript, führen Sie es erneut aus und wir werden sehen HTML/gcc-vers.texi
. Dann können wir das Verzeichnis zum Pfad hinzufügen HTML
und es wird diesmal gcc.texi
korrekt erstellt.
Übrigens .texi
sind die meisten Dateien eigentlich Unterknoten. Glücklicherweise sind sie leicht an einem Kommentar am Anfang jeder Datei zu erkennen. Um sie (anhand dieses Kommentars) herauszufiltern und eine Liste der Knotendateien auf oberster Ebene anzuzeigen, führen Sie Folgendes aus:
grep -L '@c This is part of the' *.texi
Die resultierenden Dateien sind
ppinternals.texi
cpp.texi
gccint.texi
gcc.texi
install.texi
poly-int.texi