如何正确处理本地构建的二进制文件?

如何正确处理本地构建的二进制文件?

我倾向于从源代码构建二进制文件。我通常的设置如下

$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"

在配置阶段,之前makemake 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也类似)。libthing-2.1

Stow 让一切变得非常容易卸载软件。无需追查一个人安装的每个小文件make install只是为了卸载和删除一个软件,而只需

$ cd "$HOME/local/stow"
$ stow -D thing-2.1
$ rm -rf thing-2.1

相关内容