Makefile 魔术隐藏使文件变量。它们记录在哪里?

Makefile 魔术隐藏使文件变量。它们记录在哪里?,makefile,Makefile,我正在看一些UNIX软件源代码生成文件。它们似乎使用的变量不是make定义的,也不是make文件的作者明确定义的。例如,在一个安装目录中有DESTDIR,在另一个安装目录中有DESTDIR。我知道这些是做什么的,但我不知道它们是在哪里被记录的,它们是如何产生的,如果它们是标准化的,或者根据惯例或其他方式,文件对这些变量有哪些其他隐式/隐藏的依赖性。因此,我的问题是,这些类型的变量记录在哪里,还有哪些其他有意义的变量存在呢?这些makefile约定,就GNU而言,在中进行了描述。谢谢你,班瑟。我没

我正在看一些UNIX软件源代码生成文件。它们似乎使用的变量不是make定义的,也不是make文件的作者明确定义的。例如,在一个安装目录中有DESTDIR,在另一个安装目录中有DESTDIR。我知道这些是做什么的,但我不知道它们是在哪里被记录的,它们是如何产生的,如果它们是标准化的,或者根据惯例或其他方式,文件对这些变量有哪些其他隐式/隐藏的依赖性。因此,我的问题是,这些类型的变量记录在哪里,还有哪些其他有意义的变量存在呢?

这些makefile约定,就GNU而言,在中进行了描述。谢谢你,班瑟。我没有彻底搜索。

这些变量在
make
或Unix环境中都不是“标准”的。它们在没有定义的makefile中使用表明makefile缺少一些上下文,或者(更可能)makefile不是很好

然而,这两个名称至少与常用的名称相似。它们的意思通常差不多

INSTALL\u ROOT
意味着安装代码应该使用命名目录(可能是
/usr/local
),而不是使用
/
作为安装的顶级目录。二进制文件将安装在
${INSTALL_ROOT}/bin
;标题将进入
${INSTALL_ROOT}/include
${INSTALL_ROOT}/lib
中的库;手册不同章节的
${INSTALL_DIR}/man/manN
手册页;等等

使用
DESTDIR
可能意味着只需要安装二进制文件,因此它会映射到
/usr/local/bin
或类似的内容。或者它可能是
INSTALL\u ROOT
的同义词,这意味着软件将安装在
${DESTDIR}
下的适当子目录中。(
make
支持
${VARIABLE}
$(VARIABLE)
来展开变量。)

如果需要设置它们,则
README
文件或
INSTALL
文件应包含有关如何以及为什么设置它们的信息。例如,您可以编写:

make INSTALL_ROOT=/usr/local
在调用
make
的命令行上,虽然让人们这样做有点不寻常,但应该有一个适用于尽可能多的人的默认值。通常,如果使用自动配置系统,则通过以下方式指定目录:

./configure --prefix=/opt/local

(因为在使用自动配置工具时,默认值是
/usr/local

也许它们是环境变量?您可以将它们传入,以便从环境中生成。也许它们是在UNIX环境中记录的??我不知道,我得看得更深一点!是的,DESTDIR和INSTALL_ROOT是同义词。我更想知道还有什么其他类似的变量存在。不管怎样,@Banthar发布的链接似乎给了GNU一个权威的答案。答案是,对于任何给定的系统,可能存在无数其他相关变量。由于GNU制定的标准,有一些半标准名称,但是(和以往一样)有一些相互竞争的标准(Perl、X11做的事情至少有些不同——并且有它们自己的特点)。