我正在调整现有程序以使用Autotools进行构建,但最终的过程取决于环境变量。有没有办法在构建或安装过程中永久设置此环境变量?
该程序旨在供Unix用户使用,我可以尝试将导出命令直接连接到.bashrc文件,并在发生故障时警告用户,因为大多数用户实际上只是使用Ubuntu来运行它(它& #39;一个针对学生的相对简单的程序),但我想知道是否有更便携的方式来做到这一点。
这就是我不想做的事情:
export VAR=/my/totally/not/hardcoded/path >> $HOME/.bashrc
答案 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
添加目录,以便找到程序在第一位)。在这种情况下,您甚至可以将主程序安装在通常不在路径中的位置,以便用户不会意外地直接运行它。这种机制的优点是环境变量的范围限定为程序的运行,而不是整个登录会话,但缺点是用户无法覆盖它们。