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