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



我知道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

使用递归有什么具体原因吗 变量比简单的变量?

是的:简单赋值的变量是 GNUmake的扩展。 传统make没有该功能,POSIX也没有指定。 因此

  1. 使用普通("递归")赋值更易于移植。 事实上,它是某些环境中唯一可用的替代方案。
  2. 使用普通赋值更为传统。
  3. 使用普通作业只是有多少人学会了这样做。
  4. 主要在默认make不是 GNU 的环境中工作的人make甚至可能不知道/对简单的赋值或其他 GNU 扩展感兴趣。

此外

  1. 在整个过程中只使用一种形式的赋值会产生一个更容易理解的 makefile,而普通赋值具有一些有用的属性,可能会倾向于 makefile 作者选择该变体。

可能还有其他人。

最新更新