我从以下网址下载了包含 gcc 信息手册的档案官方页面。提取存档文件后,得到的不是一个单独的 .texi 文件,而是一个包含许多 .texi 文件的非常复杂的目录结构。我不确定如何将它们实际转换为单独的 .info 文件(这样我就可以将其 install-info 到我的 emacs info 目录 /usr/share/info 中,我知道如何做到这一点)。
我完全不明白如何从这个包含许多 .texi 文件的目录中获取 .info 文件。从解压的顶层目录中,我转到 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 在这里,这里有一个可以解决这个问题的黑客,至少对于从 OP 中的链接下载的独立 texinfo 源的 8.3.0 版本来说是这样:
总结:
步骤 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
解释:
问题似乎是在gcc 在线文档页面不包含任何 Makefile。看来 gcc 维护者并没有过多担心如何让独立信息手册易于编译。
以下是让它工作的一个小窍门(对我来说,对于 gcc 8.3 texinfo 源,这个小窍门很有用):
首先,转到gcc/gcc/docs
我们提取档案的位置。我们将看到gcc.texi
,一个名为的目录include
,以及一些其他.texi
文件。如果我们现在尝试这样做makeinfo gcc.texi
,我们会收到很多关于未找到之类的投诉gcc-common.texi
。那些丢失的文件恰好在目录中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