为什么只将递归变量用于简单的shell命令名称?

时间:2019-06-04 09:40:18

标签: makefile gnu-make

我知道makefile中简单变量和递归变量之间的区别。
我已经看到许多使用递归变量作为简单shell命令名称的makefile(包括linux内核)。
我认为在这种情况下使用简单变量就足够了。
但是大多数使用递归变量。
使用递归变量比使用简单变量有什么特殊的原因吗?

CC = cc
AR = ar
RM = rm -f
DIFF = diff
TAR = tar
FIND = find
INSTALL = install
TCL_PATH = tclsh
TCLTK_PATH = wish
XGETTEXT = xgettext
MSGFMT = msgfmt
CURL_CONFIG = curl-config
PTHREAD_LIBS = -lpthread

1 个答案:

答案 0 :(得分:1)

  

是否有使用递归的任何特定原因   变量比简单变量多?

是:简单分配的变量是GNU make扩展。传统的make没有该功能,并且POSIX也未指定。因此

  1. 使用普通(“递归”)分配更加可移植。实际上,它是某些环境中唯一可用的替代方法。
  2. 使用常规分配更为传统。
  3. 使用普通作业就是多少人学会了。
  4. 主要在默认make不是GNU make的环境中工作的人们甚至可能不知道/不感兴趣简单分配或其他GNU扩展。

另外,

  1. 在整个过程中仅使用一种形式的赋值会生成一个易于理解的makefile,并且普通赋值具有一些有用的属性,可能会使makefile的作者倾向于选择该品种。

可能还有其他人。