Make

如何避免 make 生成和安裝手冊頁?

  • March 16, 2018

上下文:我正在 CygWin 中的 Windows 上編譯 OpenLDAP。

由於我對手冊頁(可能還有其他文件,我專注於完成編譯)不感興趣,因為我可以讓它們線上,我如何告訴 configure 和/或 make 跳過它們的生成(或至少它們的安裝)?

在執行之前,在項目根目錄中./configure編輯以從變數中刪除。這將導致在建構和安裝過程中忽略子目錄中的所有內容。Makefile.in``doc``SUBDIRS``doc

sed -i '/SUBDIRS/s/doc//' Makefile.in

如果您查看 make 文件,您應該會看到一系列規則,即開頭沒有空格的行。您可能習慣使用的規則install通常放在 make 文件的底部,但通常還有許多其他規則。查找引用手冊頁源文件(它們通常具有單個數字文件副檔名)或某些文件目錄的規則。找到它後,您有三個選擇:1)通過刪除其命令(即它後面以空格開頭的行)使其成為空規則,或 2)刪除對它的引用,(即查看其他規則對於具有該規則名稱的命令,或 3) 找到不執行它的現有安裝規則。

讓我舉個例子,使用真實 makefile 的摘錄:

default: all

all: lisp info

info:
   cd doc && $(MAKE) EMACS="$(EMACS)"

install: install-lisp install-info

install-lisp: lisp
   @$(SHELL) $(srcdir)/mkinstalldirs "$(DESTDIR)$(lispdir)";\

install-info: info
   @echo "cd doc && $(MAKE) EMACS=\"$(EMACS)\" 

dist: Makefile foo.elc
   $(MAKE) tarball \

clean:
   -rm -rf $(PACKAGE)* ;\

distclean: clean
   -rm -f config.log config.status config.cache Makefile 

在上面的範例中,您可以刪除之後的行info:install-info:從而使其成為空規則,或者更好的方法是install-infoinstall規則中刪除單詞(行開頭install:

現在,對於第三個(最佳)選項,再次查看我的範例文件並註意存在一個 command install-lisp,您可以看到除了安裝文件之外的所有操作,因為這是命令中僅有的兩個命令install。所以在這個例子中,真的不需要改變任何東西,只需要執行make installrun make install-lisp。您的 make 文件可能會為您提供類似的選項。不檢查它是不可能知道的。

最後,如果您不想執行 amake install怎麼辦?也許你只是想表演一個香草make。為此,請查找名為default;的規則。這將是在make沒有特定命令的情況下呼叫時使用的規則。在我的範例中,您會看到該default規則僅指向另一個名為 的規則all,而該規則又呼叫了另外兩個規則:lispinfo。當我粘貼範例時,為了簡潔起見,我剪掉了大部分行,因此lisp規則的文本不在此處,但很明顯您確實想使用該命令,而不是該info命令,因此您可以執行make lisp.

引用自:https://unix.stackexchange.com/questions/430627