如何makeinfo gcc手冊texinfo檔?

如何makeinfo gcc手冊texinfo檔?

我從以下位置下載了包含 gcc 資訊手冊的存檔官方頁面。解壓縮存檔後得到的不是單一 .texi 文件,而是一個非常複雜的目錄結構(當有很多 .texi 文件時)。我不確定如何將它們實際轉換為單一 .info 檔案(以便我可以將其安裝到我的 emacs 資訊目錄 /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等構建整個 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 在這裡,這是一個解決問題的 hack,至少對於從 OP 中的鏈接下載的獨立 texinfo 來源的 8.3.0 版本:

總而言之:

步驟 1:在docs包含 的資料夾中gcc.texi,使用文字編輯器開啟該文件install.texi2html,然後刪除最後一行rm $DESTDIR/gcc-vers.texi

步驟 2:使用 `./install.texi2html 執行腳本

第三步:運行makeinfo gcc.texi -P ./HTML -P ./include

步驟 4:使用 或 emacs 閱讀手冊info gcc.infoC-u F1 i然後執行path/to/gcc.info

解釋:

看來問題在於獨立的 texinfo 來源 tarball 上列出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

相關內容