下一步: 命令變數, 上一步: Makefile 基礎, 上層: Makefile 慣例 [目錄][索引]
編寫 Makefile 命令 (以及任何 shell 腳本,例如 configure
) 時,應在 sh
(傳統 Bourne shell 和 POSIX shell) 下執行,而不是 csh
。請勿使用 ksh
或 bash
的任何特殊功能,或傳統 Bourne sh
不廣泛支援的 POSIX 功能。
configure
腳本和用於建置及安裝的 Makefile 規則,除了以下工具程式之外,不應直接使用任何其他工具程式
awk cat cmp cp diff echo expr false grep install-info ln ls mkdir mv printf pwd rm rmdir sed sleep sort tar test touch tr true
壓縮程式,例如 gzip
,可用於 dist
規則中。
一般來說,請堅持使用這些程式廣泛支援 (通常是 POSIX 規範) 的選項和功能。例如,不要使用 ‘mkdir -p’,即使它可能很方便,因為有些系統完全不支援它,而且在其他系統上,它對於平行執行並不安全。有關已知不相容性的列表,請參閱 可移植 Shell 程式設計,位於 Autoconf 中。
最好避免在 makefile 中建立符號連結,因為有些檔案系統不支援它們。
用於建置和安裝的 Makefile 規則也可以使用編譯器和相關程式,但應透過 make
變數來執行,以便使用者可以替換替代方案。以下是我們所指的一些程式
ar bison cc flex install ld ldconfig lex make makeinfo ranlib texi2dvi yacc
使用以下 make
變數來執行這些程式
$(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX) $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC)
當您使用 ranlib
或 ldconfig
時,您應確保如果系統沒有相關程式也不會發生任何糟糕的事情。安排忽略來自該命令的錯誤,並在命令之前印出訊息,告知使用者此命令的失敗並不代表有問題。(Autoconf 的 ‘AC_PROG_RANLIB’ 巨集可以協助完成此操作。)
如果您使用符號連結,您應該為不支援符號連結的系統實作後備方案。
可以透過 Make 變數使用的其他工具程式包括
chgrp chmod chown mknod
在 Makefile 的部分 (或腳本) 中使用其他工具程式是可以接受的,這些部分 (或腳本) 僅適用於您知道這些工具程式存在的特定系統。
下一步: 命令變數, 上一步: Makefile 基礎, 上層: Makefile 慣例 [目錄][索引]