我從以下位置下載了包含 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.info
,C-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