我正在查看几个UNIX软件源make文件。它们似乎使用的是未由make定义的变量,也未使用make文件的作者明确表示。例如,在另一个INSTALL_ROOT中有一个DESTDIR。我知道这些是做什么的,但我不知道它们的记录,它们是如何形成的,它们是否标准化,或者其他类似的隐含/隐藏依赖关系使文件可以通过约定或其他方式对这些变量产生影响。所以我的问题是这些类型的变量记录在哪里以及存在哪些其他有意义的变量?
答案 0 :(得分:1)
这些makefile约定,就GNU而言,在https://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html#Makefile-Conventions中描述。谢谢@Banther。我没有足够彻底的谷歌。
答案 1 :(得分:0)
这些变量在make
或Unix环境中都不是“标准”。它们在未定义的makefile中使用表明makefile中缺少某些上下文,或者(更有可能)makefile不是很好。
但是,这两个名称至少与经常使用的名称相似。它们通常意味着相同的东西。
INSTALL_ROOT
意味着安装代码不应使用/
作为安装的顶级目录,而应使用命名目录 - 或许/usr/local
。二进制文件将安装在${INSTALL_ROOT}/bin
;标题将放入${INSTALL_ROOT}/include
; ${INSTALL_ROOT}/lib
中的图书馆; ${INSTALL_DIR}/man/manN
中的手册页,适用于本手册的不同部分;等
使用DESTDIR
可能意味着只需要安装二进制文件,因此它映射到/usr/local/bin
或类似的东西。或者它可能是INSTALL_ROOT
的同义词,这意味着该软件将安装在${DESTDIR}
下的合适子目录中。 (make
支持${VARIABLE}
和$(VARIABLE)
扩展变量。)
如果您需要设置它们,README
文件或INSTALL
文件应包含有关如何以及为何设置它们的信息。例如,您可以写:
make INSTALL_ROOT=/usr/local
在调用make
的命令行上,虽然让人们这样做有点不寻常 - 应该有一个适合尽可能多的人的默认值。通常,如果使用自动配置系统,则通过以下方式指定目录:
./configure --prefix=/opt/local
(因为使用自动配置工具时默认值为/usr/local
。