是否应在Makefile中使用较长的局部变量同义词?

时间:2019-01-03 12:41:07

标签: unix makefile gnu-make bsd

make中(我正在使用OpenBSD的实现,但我想这个问题也与GNU make有关),我们有以下所谓的 local variables

@    The name of the target
%    The name of the archive member (for library rules)
!    The name of the archive file (for library rules)
?    The list of prerequisites for this target that were deemed out of date
<    The name of the prerequisite from which this target is to be built (for inference rules)
*    The file prefix of the file, containing only the file portion, no suffix or preceding directory components

(大约来自OpenBSD上的man make

这些局部变量具有同义词:例如,.IMPSRC代表<.TARGET代表@。 FreeBSD的手册说这些较长的版本是首选。 OpenBSD的手册页中没有提及此类内容,但是说这些较长的名称是扩展名。

使用更长的名称更好吗?哪个更好的兼容性?都是POSIX吗?

1 个答案:

答案 0 :(得分:2)

这些变量在GNU make中称为automatic variables,在POSIX标准中称为内部变量

这些名称的简称纯粹是BSD make发明,在其他版本的make(例如GNU make)中都不存在,并且在POSIX standard for make中未提及。

是否要使用它们取决于您,但是它们完全不可携带。当然,如果要实现兼容性层,则始终可以自己定义它们。