如何从makefile在Linux上安装程序?

时间:2012-09-29 17:33:01

标签: c++ linux bash

  

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

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

4 个答案:

答案 0 :(得分:1)

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

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

setenv "my/directory:"$PATH
rehash

bash,我认为,它是

PATH=/my/directory:$PATH
export PATH

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

答案 1 :(得分:1)

您可能还想熟悉Linux Filesystem Hierarchy:“什么在哪里”的标准定义。以下是更多信息:

环境变量可以全局定义(“为每个人”,例如/etc/profile),或在本地定义(“每个用户”,例如~/.bashrc)。以下是您的一些选择的总结:

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

  • 您的安装程序可以将文件放在所需的位置,因此您的程序无需搜索 - 它可以使用硬编码路径。或者您可以将数据目录的路径放入另一个文件中,该文件将被硬编码(例如/etc/programname.config)。

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

如果更喜欢第二种解决方案,那就是我。第一个解决方案适用于包管理器,如果你真的没有很多数据文件,它就不那么过分了。