Я скачал архив с руководством по gcc info с сайтаофициальная страница. Извлечение архива приводит не к одному файлу .texi, а к очень сложной структуре каталогов, когда много-много файлов .texi. Я не уверен, как на самом деле преобразовать их в один файл .info (чтобы я мог установить-info, который находится в моем каталоге emacs info /usr/share/info, я знаю, как это сделать).
Для меня совершенно неочевидно, как получить файл .info из этого каталога со множеством файлов .texi. Из каталога верхнего уровня, который был извлечен, я перешел в gcc/doc и затем нашел (среди примерно 30 других файлов texi) файл с именем gcc.texi. Попытка makeinfo gcc.texi
заставила его жаловаться, что gcc.texi:25: @include: could not find gcc-common.texi
, хотя этот файл находится в gcc/doc/include.
Какую команду мне следует использовать для создания этого?
решение1
Я не думаю, что существует простой и понятный способ извлечь только нужный вам код и запустить его независимо от Makefile
(который генерируется Makefile.in
при запуске ./configure
etc для сборки всего пакета GCC). Если вам действительно нужно выполнить сборку локально, следуйте стандартным инструкциям по сборке пакета.
Более подробно,Makefile.in
содержит следующие фрагменты;
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
Определение продолжается очень длинным списком индивидуальных целей, и я не дочитал его до конца.
решение2
OP, вот хак, который решает эту проблему, по крайней мере для версии 8.3.0 автономных источников texinfo, загруженных по ссылке в OP:
Краткий обзор:
Шаг 1: В docs
папке, содержащей gcc.texi
, откройте файл install.texi2html
с помощью текстового редактора и удалите последнюю строку, содержащую rm $DESTDIR/gcc-vers.texi
.
Шаг 2: запустите скрипт с помощью `./install.texi2html
Шаг 3: бегmakeinfo gcc.texi -P ./HTML -P ./include
Шаг 4: прочитайте руководство с помощью info gcc.info
, или из emacs, C-u F1 i
затем выполнитеpath/to/gcc.info
Объяснение:
похоже, проблема в том, что автономные исходные архивы texinfo перечислены настраница gcc onlinedocsне содержат никаких Makefiles. Похоже, что разработчики gcc просто не слишком беспокоились о том, чтобы сделать отдельные руководства info простыми для компиляции.
Вот хак, который заставит это работать (мне это помогло с исходниками texinfo для gcc 8.3):
Сначала перейдите в папку, gcc/gcc/docs
откуда мы извлекли архив. Мы увидим gcc.texi
, каталог с именем include
и некоторые другие .texi
файлы. Если мы попытаемся сделать это makeinfo gcc.texi
сейчас, то получим много жалоб на что-то вроде gcc-common.texi
not found. Эти отсутствующие файлы как раз находятся в каталоге include
, поэтому мы добавляем его в путь поиска с помощью -P
опции:
makeinfo gcc.texi -P ./include
Однако мы получим жалобу на отсутствующий gcc-vers.info
. Этот файл нигде не найден, но он должен был быть сгенерирован автоматически, autogen
когда будет сконфигурировано и построено полное дерево исходников gcc (не только исходники texi). Однако нам повезло, потому что в том же каталоге, что и gcc.texi
, есть скрипт с именем install.texi2html
. В конце скрипта мы видим строку:
rm $DESTDIR/gcc-vers.texi
Это означает, что скрипт на самом деле генерирует нужный нам файл, но затем удаляет его. Поэтому просто удалите эту строку из скрипта, запустите его снова, и мы увидим HTML/gcc-vers.texi
. Затем мы можем добавить HTML
каталог в путь, и на этот раз gcc.texi
сборка будет выполнена правильно.
Кстати, большинство .texi
файлов на самом деле являются подузлами. К счастью, их легко идентифицировать по комментарию в начале каждого файла. Чтобы отфильтровать их (по этому комментарию) и увидеть список файлов узлов верхнего уровня, выполните
grep -L '@c This is part of the' *.texi
Полученные файлы:
ppinternals.texi
cpp.texi
gccint.texi
gcc.texi
install.texi
poly-int.texi