我倾向于从源代码构建二进制文件。我通常的设置如下
$HOME/build -> this gets the sources
$HOME/programs -> this is where the build happen, so where the binaries are
完成后,我将以下内容放入我的bashrc
export MYNEWBINDIR = $HOME/programs/...
export PATH=$MYNEWBINDIR:$PATH
我的问题是:这是推荐的方式吗?例如,我可以创建一个 local $HOME/bin
,符号链接那里的所有二进制文件,然后将其添加到路径中......
答案1
这或多或少取决于个人按照自己的意愿去做,但我建议您始终保留基本系统或任何包管理器已经使用的目录。您确实不想通过覆盖以前安装的文件来混淆软件包管理器!所以一定要/bin
独自离开。
在大多数系统上,/usr/local
应该是您安装东西的安全区域,尽管某些系统(例如 FreeBSD 和 OpenBSD)上的包管理器也使用它,因为它们将从 ports/package 安装的软件视为本地软件。
另请参阅条目“文件系统层次结构标准“ 和 ”Unix文件系统”在维基百科上。
一些 Unices 也有hier(7)
手动的您可以参考一下。 (该链接指向 OpenBSD 的版本,但它至少在 Linux 中的 Ubuntu 上也可用。在 OpenBSD 的情况下,它记录了系统软件所识别的目录,因此它没有提及/opt
,例如)。
在哪里构建内容并不重要,因为它是一个在完成后可能会删除的目录。不过,最好远离实际的安装目录。我曾经研究过在/bin
和中有源树的系统/usr/local
,这非常不整洁。
我还建议您make install
对软件进行实际操作,而不是从构建目录中运行可执行文件,除非您正在调整构建。将可执行文件收集在一个位置可以让你的PATH
设置更干净、更容易,除非你真的想PATH
显然,每个软件都有一个独特的元素。
个人意见如下:
对于我专门为自己构建的软件,我倾向于使用私有层次结构$HOME/local
进行安装。
当编译使用 GNU 自动工具并因此具有configure
脚本的程序时,这非常简单。你只要说
$ ./configure --prefix="$HOME/local"
在配置阶段,之前make
和make install
.
当使用 CMake 编译程序时,可以通过以下方式实现相同的目的:
$ cmake -DCMAKE_INSTALL_PREFIX="$HOME/local" .
make
在和步骤之前make install
。安装 Perl 模块等时可能会产生相同的效果(通过其他方式)。
那么你显然必须添加$HOME/local/bin
到你的路径中......
就我个人而言,我使用GNU 斯托也是,这意味着我并没有真正指定$HOME/local
为安装前缀,而是$HOME/local/stow/thing-2.1
在配置软件包时指定thing-2.1
。
安装后:
$ cd "$HOME/local/stow"
$ stow thing-2.1
该目录的内容$HOME/local/stow/thing-2.1/bin
将显示(使用符号链接) (对于安装在 下的任何或其他目录$HOME/local/bin
也类似)。lib
thing-2.1
Stow 让一切变得非常容易卸载软件。无需追查一个人安装的每个小文件make install
只是为了卸载和删除一个软件,而只需
$ cd "$HOME/local/stow"
$ stow -D thing-2.1
$ rm -rf thing-2.1