下一节: , 上一节: , 上一级: 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',尽管它可能很方便,因为一些系统根本不支持它,而在其他系统中,它对于并行执行是不安全的。有关已知不兼容性的列表,请参阅 Autoconf 中的 可移植的 Shell 编程

避免在 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 约定   [目录][索引]