如何使用Autotools永久设置环境变量?

时间:2018-04-05 14:13:32

标签: unix environment-variables autotools autoconf automake

我正在调整现有程序以使用Autotools进行构建,但最终的过程取决于环境变量。有没有办法在构建或安装过程中永久设置此环境变量?

该程序旨在供Unix用户使用,我可以尝试将导出命令直接连接到.bashrc文件,并在发生故障时警告用户,因为大多数用户实际上只是使用Ubuntu来运行它(它& #39;一个针对学生的相对简单的程序),但我想知道是否有更便携的方式来做到这一点。

这就是我不想做的事情:

export VAR=/my/totally/not/hardcoded/path >> $HOME/.bashrc

4 个答案:

答案 0 :(得分:1)

我想,不。

Autotools是关于构建程序的,而不是关于程序运行的环境设置。这是用户/管理员应该做的事情。 (我可以想象这样做,但我真的不想尝试解决这个问题,因为这个想法本身似乎对我不利)

如果您的程序在运行期间确实需要一些环境变量,那么您应该为应用程序修补源代码以测试变量是否存在,并将其设置为默认的期望值(如果它不存在)。另一个想法是强制使用强制命令行开关来传递值。

答案 1 :(得分:0)

目前尚不清楚这与autotools(或任何其他构建系统)有什么关系。当构建的程序在稍后的时间运行时,没有任何构建系统可以安排env var存在。

一种解决方案是让您的程序具有var的硬编码默认值,如果在程序开始运行时环境var不存在,则使用该默认值。另一个经常使用的解决方案是将您的二进制文件命名为 myprog.bin ,并安装名为 myprog 的shell脚本,该脚本在执行exec myprog.bin之前设置环境。

答案 2 :(得分:0)

  

我正在调整现有程序以使用Autotools进行构建,但最终的过程取决于环境变量。有没有办法在构建或安装过程中永久设置此环境变量?

你对程序是什么(例如程序是一个守护程序?一个用户程序?)还是环境变量依赖的本质(例如它是另一个程序?一个挂载点?一个URL?数据库连接字符串?)。更具体的可能会给你一个更好的答案。

无论如何,autotools不太可能提供任何功能来帮助:它是一个构建系统。根据环境变量依赖性的性质,您可能需要包管理(如果打包)或系统管理级别设置。

由于您认为您的主要用户群位于Ubuntu上this help page可能会给您一些想法。

答案 3 :(得分:0)

很抱歉这是迟到的,但到目前为止所有答案都令人震惊......不完整。

构建和安装软件都是Autotools的核心用例,安装部分绝对可以涉及添加或修改影响用户环境的文件。如果软件是由具有足够权限的用户安装的,那么这些效果绝对可以应用于所有系统用户,尽管细节可能因系统而异(并且Autotools也可以帮助解决这个问题!)。 p>

例如,在RedHat系列Linux上,例如RedHat Enterprise,Fedora,Oracle Linux和其他各种Linux,您可以在/etc/profile.d中删除一个适当命名的文件,其中的命令将自动被读取和执行每个登录shell。为所有用户设置环境变量是此功能的常见用途之一。我不确定Ubuntu等Debian家族的Linux,但总是可以修改文件/etc/profile而不是具有相同的效果,你绝对可以编写一个Automake安装钩子来做到这一点。

或者对于完全不同的方法,您始终可以在程序周围提供一个包装器脚本来设置所需的环境变量(假设该点不是向PATH添加目录,以便找到程序在第一位)。在这种情况下,您甚至可以将主程序安装在通常不在路径中的位置,以便用户不会意外地直接运行它。这种机制的优点是环境变量的范围限定为程序的运行,而不是整个登录会话,但缺点是用户无法覆盖它们。