【问题标题】:How to install programs on Linux from a makefile? [duplicate]如何从 makefile 在 Linux 上安装程序? [复制]
【发布时间】:2012-09-29 17:33:01
【问题描述】:

可能重复:
What should Linux/Unix 'make install' consist of?

我正在制作一个可以从命令行调用的程序,例如./prog arg1 arg2。我想知道,我怎样才能使它可以从系统上的任何地方运行它?我知道我可以将prog 放入/usr/bin/,但是如果我的程序需要来自其安装目录的资源(可以是用户下载它的任何位置)怎么办?

【问题讨论】:

  • 此类资源通常放在/usr/share 下的某处。这些位置通常在编译时硬编码到程序中,即程序是为特定的安装位置编译的。与配置文件等相同。

标签: c++ linux bash


【解决方案1】:

将您的程序所在的目录放入path 环境变量中,或将您的程序移动到path 中已经存在的目录之一中(通常需要超级用户权限,我猜你没有这个权限,那么你不会不要问这个问题)。

将目录添加到搜索路径的前面并让系统在tcsh 上刷新其数据库,比如说

setenv "my/directory:"$PATH
rehash

bash,我认为是

PATH=/my/directory:$PATH
export PATH

(无需重新散列)。请注意,上述命令将您的目录放在搜索路径的顶部,即这些将在任何其他之前搜索。因此,如果您的程序被称为“gcc”,那么您的程序将被执行而不是 GNU C 编译器。或者,您可以将您的目录添加到搜索路径的末尾,在这种情况下,只有在搜索路径中的任何其他目录中都没有找到同名的其他程序时,才会选择您的程序。

【讨论】:

    【解决方案2】:

    您可能还想熟悉Linux Filesystem Hierarchy:“什么去哪里”的标准定义。这里有更多信息:

    环境变量可以全局定义(“针对所有人”,例如/etc/profile),也可以在本地定义(“每个用户”,例如~/.bashrc)。以下是您的一些选项的一个很好的总结:

    【讨论】:

      【解决方案3】:

      当您使用prog arg1 arg2 执行程序时,这要归功于您的shell,它在$PATH 环境变量中搜索程序所在的文件夹。 (尝试env | grep PATH 查看这些文件夹)。

      您需要在此变量中添加一个新目录(export PATH="/new/directory/path/:$PATH" 如果在 bash 下,setenv PATH "/new/directory/path/:$PATH" 如果在 tcsh 下)或复制您的程序和它需要在 PATH 文件夹之一中执行的所有文件。

      【讨论】:

        【解决方案4】:

        有两种处理方式(Makefile 与它们无关)

        • 您的安装程序可以将文件放在它想要的位置,这样您的程序就不必搜索——它可以使用硬编码的路径。或者您可以将数据目录的路径放入另一个文件中,该文件将被硬编码(如 /etc/programname.config)。

        • 您将所有内容放在一个目录中(通常类似于 /opt/programname)。当然,您也可以对其进行硬编码,或者您的程序可以 readlink() /proc/pid/exe 文件以获得很好的机会(但不能保证。特别是,例如,如果使用符号链接指向 / usr/bin/programname 到您的 /opt/programname/bin/programname 或其他任何内容,但如果这是硬链接,它将不起作用) 获取可执行文件的路径。从那里您应该能够访问您的数据文件。

        如果更喜欢第二种解决方案,但这只是我。第一个解决方案适用于包管理器,如果您真的没有很多数据文件,它就不会那么矫枉过正。

        【讨论】:

          猜你喜欢
          • 2016-12-17
          • 1970-01-01
          • 2020-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-16
          相关资源
          最近更新 更多