下一步: , 上一步: , 上層: Makefile 慣例   [目錄][索引]


7.2.2 Makefile 中的工具程式

編寫 Makefile 命令 (以及任何 shell 腳本,例如 configure) 時,應在 sh (傳統 Bourne shell 和 POSIX shell) 下執行,而不是 csh。請勿使用 kshbash 的任何特殊功能,或傳統 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)

當您使用 ranlibldconfig 時,您應確保如果系統沒有相關程式也不會發生任何糟糕的事情。安排忽略來自該命令的錯誤,並在命令之前印出訊息,告知使用者此命令的失敗並不代表有問題。(Autoconf 的 ‘AC_PROG_RANLIB’ 巨集可以協助完成此操作。)

如果您使用符號連結,您應該為不支援符號連結的系統實作後備方案。

可以透過 Make 變數使用的其他工具程式包括

chgrp chmod chown mknod

在 Makefile 的部分 (或腳本) 中使用其他工具程式是可以接受的,這些部分 (或腳本) 僅適用於您知道這些工具程式存在的特定系統。


下一步: , 上一步: , 上層: Makefile 慣例   [目錄][索引]